0
我有一個腳本,可以從數據庫中獲取所有圖像的URL並通過請求模塊下載這些圖像。問題是,當我有超過400個圖像時,該過程停止超過480,並且不會繼續。這個問題是不是URL,因爲某個時候停止在450或467 ......使用node.js請求下載圖像
var process = {
error: 0,
success: 0,
getTotal: function() {
return this.error + this.success;
}
};
var request = require('request');
var maxLength = 10 // 10mb
var callback = function(error, success) {
if (error) {
++process.error;
} else {
++process.success;
}
console.log(process.getTotal());
};
Photo.find({limit: 500}).exec(function (err, images){
if (err || images.length === 0) {
return err;
}
for (var image in images) {
request({
url: images[image].url,
encoding: null
}, function(err, res, body) {
//console.log(file.url);
if (err) {
return callback(res, null);
}
if (res.headers['content-length'] > maxLength*1024*1024) {
return callback(new Error('Image too large.'), null)
}
if (!~[200, 304].indexOf(res.statusCode)) {
return callback(new Error('Received an invalid status code.'), null);
}
if (!res.headers['content-type'].match(/image/)) {
return callback(new Error('Not an image.'), null);
}
callback(false, true);
});
}
});
我也有一個限度5000倍的圖像,並在4800
問題是在'for'塊上,你多次執行'request()'函數。所以你的代碼試圖同時處理所有這些圖像。可能我建議使用一些承諾庫,例如[Bluebird](https://github.com/petkaantonov/bluebird)。 –
我測試了以下模塊: https://www.npmjs.com/package/then-request 這有要求並保證和發生相同。我忘了說我正在使用sails js,並且這是以Sails的控制檯作爲服務運行的。 –
你仍然可以使用藍鳥,'map()'函數將會有所幫助,特別是使用'concurrency'選項。這樣你就可以確保一次處理'x'的圖像量。 –