JavaScript for()循环在第一次迭代后停止
开发人员级别-Web开发初学者。熟悉HTML/CSS/JS和NodeJS 程序-我有一个视频URL数组,该程序将遍历该数组,并逐个下载视频 问题-循环在第一次迭代后停止<强>↓ 这是我的密码↓强>JavaScript for()循环在第一次迭代后停止,javascript,node.js,asynchronous,async-await,request,Javascript,Node.js,Asynchronous,Async Await,Request,开发人员级别-Web开发初学者。熟悉HTML/CSS/JS和NodeJS 程序-我有一个视频URL数组,该程序将遍历该数组,并逐个下载视频 问题-循环在第一次迭代后停止↓ 这是我的密码↓ //外部软件包/////////////////// 常数fs=要求('fs'); var请求=要求(“请求”); var路径=要求(“路径”)//////////////// ///////////////////////////////////////////////// /////////////////
//外部软件包///////////////////
常数fs=要求('fs');
var请求=要求(“请求”);
var路径=要求(“路径”)////////////////
/////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
var downloadFile=(uri,文件名)=>新承诺((解析,拒绝)=>{
request.head(uri,(err,res,body)=>{
log('content-type:',res.headers['content-type']);
fileSize=parseInt(res.headers['content-length'],10);
log('content-length:',文件大小);
如果(文件大小<125000000){
console.log('\n','Downloading File');
请求(uri)
.on('error',error=>{
资源状态(502).发送(错误消息)
拒绝(错误)
})
.pipe(fs.createWriteStream(`${filename}.mp4`))
.on('完成',决议);
}否则{
console.log('文件大小错误')
拒绝
}
});
})
//////////////
/////////////////////////////////////////////////////////////////////////////
saveVids=async()=>{
sources=fs.readFileSync(“local-FireStore-Cache-PH.txt”);
sources=JSON.parse(sources);
log(`Array length:${sources.length}]`)
对于(i=0;i
返回以下输出-
数组长度:27
当前索引:
内容类型:视频/mp4
内容长度:160860560
文件大小错误
并在第一次迭代后停止这是完整的代码。当点击
拒绝
时,代码停止运行是正常行为。如果需要继续循环,则需要处理发生错误时的操作。e、 g.打印错误,而不打印其他内容
常数fs=要求('fs');
var请求=要求(“请求”);
var路径=要求(“路径”);
var downloadFile=(uri,文件名)=>新承诺((解析,拒绝)=>{
request.head(uri,(err,res,body)=>{
log('content-type:',res.headers['content-type']);
fileSize=parseInt(res.headers['content-length'],10);
log('content-length:',文件大小);
如果(文件大小<125000000){
console.log('\n','Downloading File');
请求(uri)
.on('error',error=>{
资源状态(502).发送(错误消息)
拒绝(错误)
})
.pipe(fs.createWriteStream(`${filename}.mp4`))
.on('完成',决议);
}否则{
//console.log('文件大小错误')
拒绝(“文件大小错误”);
}
});
})
//////////////
/////////////////////////////////////////////////////////////////////////////
saveVids=async()=>{
sources=fs.readFileSync(“local-FireStore-Cache-PH.txt”);
sources=JSON.parse(sources);
log(`Array length:${sources.length}]`)
对于(i=0;i
为什么不试试“中断”或“返回错误”。我会给你一个例子,让你有一些想法,请看这个,并尝试添加到您的代码
试试看
功能测试(){
设testArray=[1,2,3,4,5,6,7,8,9,10]
对于(变量i=0;i0;i++){
console.log(testArray[i])
break;//或返回false;
//否则,请使用如下条件->注释掉以下代码并参见
/*如果(测试阵列[i]==5){
打破
} */
}
}
同步读取文件时,请确保将其转换为数组。
现在您可以遍历sourcesArray
注意:您的文本文件每行必须包含链接。文件大小错误不意味着有错误,因此它停止了吗?如果要继续程序,请使用try/catch将
wait downloadFile
方法包装为try/catchrunning@VLAZ没有朋友,这是我的if else
statement@AvishaManik好啊如果您确实进入了记录该消息的else
,那么您的承诺将永远不会得到解决,因为您只有拒绝代码>而不调用它-它应该是reject()代码>。此外,如果等待的承诺被拒绝,这与抛出异常一样——执行将终止。@AvishaManik下面有什么解决方案可以解决您的问题吗?如果是,请接受答案。如果没有,请为我们提供更多信息以帮助您。
<button onclick="test()">Try it</button>
<p id="demo"></p>
function test(){
let testArray = [1,2,3,4,5,6,7,8,9,10]
for (var i = 0; i < testArray.length > 0; i++) {
console.log(testArray[i])
break; //or return false;
//Otherwise use a condition as follwing -> comment out following code and see
/* if (testArray[i] === 5){
break;
} */
}
}
sources = fs.readFileSync("local-FireStore-Cache-PH.txt",'utf-8');
sourcesArray = sources.split('\n');