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