async / await循环遍历数组以获取s3签名的URL' s

时间:2017-11-17 01:04:54

标签: javascript node.js asynchronous async-await

我已经编写了以下代码。输入(结果)是存储在S3存储桶上的文件名数组。我希望做的是遍历该列表并检索每个列表的签名URL。



decodedtext = ""
for line in rawtext:
    decodedtext += line.decode("utf-8")
...
for line in decodedtext.split("\n"):




问题是当我在console.log结果时,新的URL不存在。我无法弄清问题是什么。我猜它是一个异步问题,但我没有足够的经验来解决它。

1 个答案:

答案 0 :(得分:2)

let result = [{ fileName: "dog.jpg" },{ fileName: "cat.jpg"}];

async function getSignedUrl(key){
    return new Promise((resolve,reject) => {
      let params = { Bucket: bucketName, Key: key };
      s3.getSignedUrl('getObject', params, (err, url) => {
        if (err) reject(err)
        resolve(url);
      })
});
}

async function process(items) {
  for (let item of items) {
    const signedUrl = await getSignedUrl(item.fileName);
    item.url = signedUrl;
  }
  return items;
}


process(result).then(res => {
  console.log(res);
});

注意:如果您正在处理可能的承诺数组,最好使用Promise.all(),因为await 异步函数中停止执行该代码 (不是事件循环),即使它是一个无阻塞函数。在这种情况下,执行并行请求要快得多