我想从S3下载多个文件,一旦完成下载就做其他事情。 我使用以下代码下载文件:
function downloadFiles(folder, files) {
var params = {
Bucket: bucket
}
files.forEach(function (file) {
params.Key = folder + '/' + file;
var fileStream = fs.createWriteStream(config.s3_downloaded_files_folder + file);
S3.getObject(params).createReadStream().pipe(fileStream);
})
}
如何宣传此代码,以便在完成所有文件下载后执行一些代码?
谢谢!
答案 0 :(得分:2)
对于流,您可以使用finish
事件来确定流已完成。此时,您可以解决承诺。您可以为此创建一个承诺数组:
Promise.all(files.map(file => new Promise((resolve, reject) => {
const fileParams = Object.assign({Key: folder + "/" + file}, params);
let fileStream = fs.createWriteStream(config.folder + file);
S3.getObject(params).createReadStream().pipe(fileStream);
file.on("finish", () => resolve());
file.on("error", err => reject(err));
})));
现在,您可以将.then
链接到Promise.all
,这会在您创建的所有承诺得到解决后解决。