最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

如何保持同步的代码时有循环的内部异步调用

运维笔记admin11浏览0评论

如何保持同步的代码时有循环的内部异步调用

如何保持同步的代码时有循环的内部异步调用

我填一个循环中的数组,我需要全阵列时,循环结束。

我试着通过承诺或用计数器处理一切,但我似乎无法在这里弄清楚的伎俩。

lambda.listFunctions({}).promise()
    .then((data) => {
        data.Functions.forEach(func => {
            lambda.listTags({ Resource: func.FunctionArn }).promise()
                .then((data) => {
                    if ("Edge" in data.Tags) {
                        available_functions.push(func.FunctionName)
                    }
                })
        });
          console.log(available_functions)
    })

available_functions总是空的,除非我在每个foreach循环结束控制台日志,然后我把它回到18倍这不是我想要的。

回答如下:

我相信你可以保证IT连锁,以确保该then的范围内的所有操作之前下降链完成。

lambda.listFunctions({}).promise()
  .then(data => {
    const { Functions } = data;

    // I converted this from forEach to for of
    for (const func of Functions) {
      lambda.listTags({ Resource: func.FunctionArn }).promise()
        .then(data => {
          if ("Edge" in data.Tags) {
            available_functions.push(func.FunctionName)
          }
        })
    }
  // also you can promise chain it if available_functions is within scope
  })
  .then(() => console.log(available_functions))

或清洁async await方式看起来是这样的...

async fn() {
  const available_functions = [];

  const { Functions } = await lambda.listFunctions({}).promise();

  for (const func of Functions) {
    const tags = await lambda.listTags({ Resource: func.FunctionArn }).promise();

    if ("Edge" in tags) {
      available_functions.push(func.FunctionName)
    }

  }

  return available_functions

}

希望这可以帮助!

发布评论

评论列表(0)

  1. 暂无评论