【发布时间】:2019-06-13 16:40:03
【问题描述】:
我想在一个系列中一个接一个地下载视频。
也就是说,第一个应该在第二个开始之前完全下载,第二个应该在第三个开始之前完全下载,依此类推。
我有以下目录结构-
video-downloader
├── index.js
├── videos.js
├── package.json
package.json
{
"name": "video-downloader",
"version": "1.0.0",
"main": "index.js",
"license": "MIT",
"dependencies": {
"download": "^7.1.0"
},
"scripts": {
"start": "node index"
}
}
video.js
const videos = [
{
url: 'https://video.com/lesson1.mp4',
name: 'Lesson 1',
},
{
url: 'https://video.com/lesson2.mp4',
name: 'Lesson 2',
},
.
.
.
{
url: 'https://video.com/lesson2.mp4',
name: 'Lesson 100',
}
]
index.js
const fs = require('fs')
const download = require('download')
const videos = require('./videos')
const OUTPUT_DIR = 'Downloads'
fs.mkdir(OUTPUT_DIR, () => {
main()
})
const main = () => {
videos.map((video, i) => {
console.log(`Downloaded file ${i + 1} of ${videos.length} (${video.name})`)
download(video.url).pipe(
fs.createWriteStream(`${OUTPUT_DIR}/${video.name}.mp4`),
)
})
}
这会并行地逐块下载视频。一次下载所有视频,但没有一个在另一个开始之前完成。
如何连续下载?
我知道我应该使用 http://caolan.github.io/async/ 之类的东西,但它需要一个函数签名并且我将 videos 作为一个数组,所以我不知道该怎么做。
【问题讨论】:
标签: javascript node.js async.js