2016-08-03 9 views
0

私はS3から複数のファイルをダウンロードしたいと思います。 私は、ファイルをダウンロードするには、次のコードを使用しています:awsストリームを承認する

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); 
    }) 
} 

私は一度、すべてのファイルをダウンロードし終えたいくつかのコードを実行することができますので、私はこのコードをpromisifyはどうすればよいですか?

ありがとうございます!

答えて

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)); 
}))); 

今、あなたはすることができます一度、すべてのユーザーが作成した約束のが解決される解決されPromise.allにチェーン.then

+0

ありがとうございました!完璧に動作します。 – Ohad

関連する問題