目前我正在使用名为download的npm包下载文件。我正在循环使用forEach下载链接数组,并在循环中触发下载。我遇到的问题是当下载的链接数量很大时,文件没有被完全下载。我认为这种情况正在发生,因为我正在异步下载这么多文件。所以现在我试图同步这样做,但我似乎无法找到如何做到这一点。在下面的代码段中,我只显示了我的问题所需的相关代码。
arrayLinks.forEach(function(link){
new download({mode: "755"}).get(link).rename(title).dest(directory).use(downloadStatus()).run();
});
答案 0 :(得分:1)
最好的方法是在函数中编写它并使用run()的回调函数从巨大的文件列表中获取下一个文件。
function loadFiles(fileList){
if(fileList instanceof Array && fileList.length > 0){
new download({
mode:"755"
})
.get(fileList.splice(0,1)[0]) // Fetches the first element from array
.rename(title)
.dest(directory)
.use(downloadStatus())
.run(function(){
loadFiles(fileList);
});
}else{
console.log('job done');
}
}
loadFiles(originFileList);
当您想要运行多次下载时,可以在循环中调用该函数并为它们提供所有相同的fileList。
for(var i=0;i<10;i+=1){
loadFiles(originFileList); // Will run 10 downloads in parallel until fileList is empty.
}