0
我有一個應用程序一次請求多達幾百個來自Amazon S3的圖像文件。這些文件是使用嵌套承諾順序請求的(所以這不是一個限制每秒請求數量或一次可以傳輸的數據量的問題),並且一切都很順利,最多隻有100多個文件。然而,此後S3無限期掛起。我該如何解決?請參閱以下相關代碼。Node.js AWS S3無限期地掛在大量圖像文件getObject請求
function one_by_one(objects_array, iterator, callback) {
let start_promise = objects_array.reduce(function (prom, object) {
return prom.then(function() {
return iterator(object);
});
}, Promise.resolve()); // initial
if(callback){
start_promise.then(callback);
}else{
return start_promise;
}
}
let grabImage = function(image){
params = {Bucket: 'partpics', Key: image};
let getObjectPromise = s3.getObject(params).promise();
return getObjectPromise.then(function(data) {
console.log('Success');
res.imageBuffers.push(data.Body);
bufferTemp = res.imageBuffers;
console.log('res.imageBuffers index: ',res.imageBuffers.length-1);
}).catch(function(err) {
console.log(err);
});
};
let myCallback = function() {
next();
}
one_by_one(res.insertThis.Image,grabImage,myCallback);
你可以通過一些簡單的類似於curl的調用(http get)來取代S3的GetObject函數來確保你的承諾代碼/框架不是問題嗎? – jarmod
這絕對不是問題,因爲在使用任何承諾之前我有同樣的問題。我認爲這個問題可能是太多的並行請求,因此是承諾。但這顯然不是問題。 – 223seneca
我嘗試了使用request-promise模塊從AWS Cloudfront獲取數據的不同方法。它仍停留在完全相同的地方因此,我已確定地確定這不是AWS S3問題,而是節點(或可能是操作系統)問題。 – 223seneca