Sum*_*mit 0 javascript amazon-s3 amazon-web-services node.js aws-sdk-nodejs
我必须使用node.js从S3存储桶下载多个文件。为此,我必须编写for loop&调用s3.getObject(param)下载方法。下载文件后,我必须合并其内容。
我这样写:
var fileContentList = new ArrayList();
for(i=0; i<fileNameList.length i++){
s3.getObject({ Bucket: "my-bucket", Key: fileNameList.get(i) }, function (error, data) {
if (error != null) {
alert("Failed to retrieve an object: " + error);
} else {
alert("Loaded " + data.ContentLength + " bytes");
fileContentList.add(data.Body.toString());
}
}
);
}
//Do merging with the fileContentList.
Run Code Online (Sandbox Code Playgroud)
但是作为s3.getObject异步调用,当前线程继续前进,fileContentList而在执行合并时没有任何添加。
我该如何解决这个问题?任何的想法?
在aws-sdk中是否有任何同步方法来下载文件?
小智 5
承诺是更好的方法,
var getObject = function(keyFile) {
return new Promise(function(success, reject) {
s3.getObject(
{ Bucket: "my-bucket", Key: keyFile },
function (error, data) {
if(error) {
reject(error);
} else {
success(data);
}
}
);
});
}
var promises = [];
var fileContentList = new ArrayList();
for(i=0; i<fileNameList.length i++){
promises.push(getObject(fileNameList.get(i)));
}
Promise.all(promises)
.then(function(results) {
for(var index in results) {
var data = results[index];
fileContentList.add(data.Body.toString());
}
// continue your process here
})
.catch(function(err) {
alert(err);
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5544 次 |
| 最近记录: |