与nodejs同步下载

时间:2016-02-18 20:03:24

标签: node.js download synchronous

目前我正在使用名为download的npm包下载文件。我正在循环使用forEach下载链接数组,并在循环中触发下载。我遇到的问题是当下载的链接数量很大时,文件没有被完全下载。我认为这种情况正在发生,因为我正在异步下载这么多文件。所以现在我试图同步这样做,但我似乎无法找到如何做到这一点。在下面的代码段中,我只显示了我的问题所需的相关代码。

arrayLinks.forEach(function(link){
    new download({mode: "755"}).get(link).rename(title).dest(directory).use(downloadStatus()).run();                    
}); 

1 个答案:

答案 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.
}