【发布时间】:2021-07-28 10:33:38
【问题描述】:
开发者级别 - 网络开发初学者。熟悉HTML/CSS/JS和NodeJS
程序 - 我有一个视频 URL 数组,这个程序是遍历数组,并逐一下载视频。
问题 - 循环在第一次迭代后停止。 ↓这是我的密码↓
////////// External Packages ///////////////////
const fs = require('fs');
var request = require('request');
var path = require("path"); ////////////////
/////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
var downloadFile = (uri, filename) => new Promise((resolve, reject) => {
request.head(uri, (err, res, body) => {
console.log('content-type:', res.headers['content-type']);
fileSize = parseInt(res.headers['content-length'], 10);
console.log('content-length:', fileSize);
if (fileSize < 125000000) {
console.log('\n', 'Downloading File');
request(uri)
.on('error', error => {
res.status(502).send(error.message)
reject(error)
})
.pipe(fs.createWriteStream(`${filename}.mp4`))
.on('finish', resolve);
} else {
console.log('File Size Error')
reject;
}
});
})
//////////////
/////////////////////////////////////////////////////////////////////////////
saveVids = async () => {
sources = fs.readFileSync("local-FireStore-Cache-PH.txt");
sources = JSON.parse(sources);
console.log(`Array length : ${sources.length}]`)
for (i = 0; i < sources.length; ++i) {
console.log(`current index : <[${i}]>`);
await downloadFile(`${sources[i].source}`, `${convertToSlug((sources[i]).title)}`);
console.log(`download function complete`)
}
}
saveVids();
返回以下输出-
Array Length : 27
current index : <[0]>
content-type: video/mp4
content-length: 160860560
File Size Error
并在第一次迭代后停止
【问题讨论】:
-
“文件大小错误”不是表示有错误,因此停止了吗?
-
如果您希望程序继续运行,请使用 try/catch 包装您的
await downloadFile方法 -
@VLAZ 没有朋友,这是我
if else声明中的设计 -
@AvishaManik 好的,如果您确实进入了记录该消息的
else,那么您的承诺将永远不会得到解决,因为您只有reject;而没有调用它 - 它应该是 @ 987654327@。此外,如果等待的 Promise 被拒绝,则与抛出异常相同 - 执行将终止。 -
@AvishaManik 下面有什么解决方案可以解决您的问题吗?如果是,请接受答案。如果没有,请提供更多信息以便我们为您提供帮助。
标签: javascript node.js asynchronous async-await request