我有一个应用程序,一次从Amazon S3请求多达几百个图像文件。使用嵌套的promises按顺序请求文件(因此这不是一个问题,每秒的请求数量或可以一次传输的数据量有一些限制),一切都可以达到100多个文件。但是,S3此后无限期挂起。我该如何解决?请参阅下面的相关代码。
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);
答案 0 :(得分:0)
最终,我解决了这个问题,将应用程序从Heroku移动(需要Git推送,因此在本地保存图像文件时导致大的Git对象问题)到Digital Ocean(不需要Git,从而实现本地保存)图像)。因此,AWS S3现在也不再适用。此外,这提供了额外的好处,使应用程序的PDF生成更快,更快。