所以我试图从服务器上获取一堆文件。目前的代码基本如下。
var http = require('http');
var fs = require('fs');
var arr = [{id:'fileOne', id:'fileTwo', id:'fileThree',....];
function fetchData() {
for (var i = 0; i < arr.length; i++) {
var file = fs.createWriteStream("../path/file.zip");
var request = http.get("url/AFG_adm.zip", function(response) {
response.pipe(file);
});
}
}
我不认为这是最好的方法,试图弄清楚如何处理错误,如何确保在下一次迭代之前加载文件...任何帮助都非常感谢。
答案 0 :(得分:1)
您应该使用async
模块来处理异步部分,request
模块也会为您节省很多精力。
您可以使用async.cargo
或async.map
以多种方式处理此问题。
理论是将事物或一系列事物分组,然后根据你想要它做的事情采取行动,但是以异步方式。
所以要下载的文件数组的基本.map
就是这样的。
// required modules
var async = require('async');
var request = require('request');
// array of urls
var URLs = ['hxxp://...ZipFile1.zip', 'hxxp://...ZipFile2.zip'];
// destination directory
var destinationDirectory = 'downloads';
// asyncDownload function
function asyncDownload(url, callback) {
// get filename
var filename = url.substring(url.lastIndexOf(".") + 1);
// create write stream
var stream = fs.createWriteStream(destinationDirectory + "/" + filename);
// listen for open event to start request and pipe
stream.on('open', function () {
request(url).pipe(stream);
})
// when finish , call callback
stream.on('finish', function () {
callback(null, destinationDirectory + "/" + filename);
})
}
async.map(
URLs, asyncDownload, function (err, results) {
console.log(results);
});