我試圖用節點js複製幾個文件。Nodejs,如何在沒有崩潰的情況下複製nodej中的多個文件
這裏是我的什麼,我試圖做一個例子:
var request = require('request');
va photos [{ 'url': 'http://xxxx.com/im1', 'name' : 'name1' }, { 'url': 'http://xxxx.com/im12', 'name' : 'name2' },
for (var i = 0; i < photos.length; i++) {
request(photos[i].source).pipe(fs.createWriteStream(photos[i].name));
}
後也許1000調用我有一個插座掛出錯誤。
以下@Timothy簡單的建議我決定使用異步模塊。
我的代碼是現在這樣的:
async.whilst(function() { return !stop; },
function (callback) {
console.log("get next 20 image");
JM.api('/' + album.id + '/photos', { after: next }, function (resf) {
if (!resf || resf.error) {
console.log(!resf ? 'error occurred' : resf.error);
}
console.log("albums" + album.id + " " + resf.data.length + " dir" + dir);
async.eachSeries(resf.data, function (photo, done) {
request(photo.source).pipe(fs.createWriteStream(dir + "/" +photo.name));
console.log("copy of image " + img_basename);
}, function (err) {
if (err) {
console.log('An images failed to copy');
} else {
console.log('All 20 image have been copied successfully');
}
if (resf.paging && resf.paging.cursors) {
console.log("suite de l'album à venir");
next = resf.paging.cursors.after;
setTimeout(function() { callback(); }, 5000);
}
else {
console.log("Fin de l'album");
stop = true;
setTimeout(function() { callback(); }, 5000);
}
});
});
},
function (err) {
if (err) {
console.log('An images failed to process');
albumcallback();
} else {
console.log('All images in this group have been processed successfully');
albumcallback();
}
}
);// end while
我仍然有可能後1 00文件複製崩潰。我確定async.whilst和async.eachSeries是weel,因爲我的日誌顯示每個調用都是串聯的。但我有一個崩潰。我暫時通過在每個副本之後加入等待來解決問題,如下所示:
request(photo.source).pipe(fs.createWriteStream(dir + "/" + img_basename));
console.log("copy of image " + img_basename);
setTimeout(function() { done(); }, 5000);
是否是請求模塊的限制?如何更改此fea線以確保每個連接在連接程序之前都關閉?
嗨。感謝您的支持者。我需要更多的信息,因爲我的代碼稍微複雜一點。我無法在一次通話中獲得所有照片,所以我已經處於一種循環狀態,並且我的照片數量是20。所以,如果我多次調用asyn.eachlimit,它會完成這項工作?或者它不會序列化電話?提前謝謝。 – mcbjam
如果您要傳遞數百個要處理的內容,並且想要限制處理速度,我建議使用每個限制。它將基本上取代你試圖做的事情,把它們分成照片組。如果你想保持你的組設置,你可以在外部循環中使用eachSeries。這意味着它只會在第一組完成後處理第二組圖片。 https://github.com/caolan/async#eachSeries –
謝謝。我會嘗試。 – mcbjam