2017-06-01 15 views
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); 
+0

你可以通过一些简单的类似于curl的调用(http get)来取代S3的GetObject函数来确保你的承诺代码/框架不是问题吗? – jarmod

+0

这绝对不是问题,因为在使用任何承诺之前我有同样的问题。我认为这个问题可能是太多的并行请求,因此是承诺。但这显然不是问题。 – 223seneca

+0

我尝试了使用request-promise模块从AWS Cloudfront获取数据的不同方法。它仍停留在完全相同的地方因此,我已确定地确定这不是AWS S3问题,而是节点(或可能是操作系统)问题。 – 223seneca

回答

0

最终,我通过移动从Heroku的应用程序(这需要Git的推动,因此造成大的Git对象时,图像文件被保存在本地的问题),以数字海洋(不需要Git的解决了这个问题,从而使本地保存图像)。因此,AWS S3现在也不在眼前。此外,这还为应用程序的PDF生成提供了更多,更快的额外好处。

相关问题