使用异步模块时,更改使用async的代码等待

时间:2017-03-26 15:39:35

标签: node.js amazon-web-services asynchronous amazon-s3

我有以下代码从s3存储桶下载我的文件:

async function downloadS3Files(options) {
  let s3client = new s3fs(options.bucket, s3options),
    files = await s3client.readdirp(options.object);
  return new Promise((resolve, reject) => {
    eachLimit(files, maxAsync, (file, callback) => {
      if ("/" === file.slice("-1")) {
        return callback();
      }
      let source = `${options.object}/${file}`,
        destination = `_input/${source}`;
      debug(destination);
      mkdirp(dirname(destination)).then(() => {
        let stream = s3client.createReadStream(source).pipe(createWriteStream(destination));
        stream.on("error", reject);
        stream.on("close", callback);
      }).catch(reject);
    }, () => {
      resolve(options)
    });
  });
}

它的工作原理......但我想避免使用eachLimit部分,因为我无法在Promise构造函数中使用等待。还有其他模块可以帮助我以Promise的方式处理最大的异步操作吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

  

还有其他模块可以帮助我以Promise方式处理最多的异步操作吗?

有几个模块可以帮助您:

对于更复杂的场景,您可以使用Task.js - 请参阅:

但它使用生成器来产生promises而不是async / await。