【发布时间】:2019-07-02 05:01:00
【问题描述】:
我正在循环中填充一个数组,循环结束时我需要完整的数组。
我尝试过通过承诺或使用计数器来处理所有事情,但我似乎无法弄清楚这里的诀窍。
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 次,这不是我想要的。
【问题讨论】:
-
你能用
await关键字吗? -
我已经尝试通过在 foreach 中异步使用匿名函数并使用 await 但它并没有减慢这个坏男孩的速度,或者至少我没有正确使用它
-
“循环结束时我需要完整的数组”实际上是做不到的。您可以构造一个promises 数组来提供数据,并在所有数据到达时使用
Promiseall 继续进行,或者删除forEach循环并编写一个异步循环和await单独的数据promises。在任何一种情况下,都无法处理与发出请求同步获得的数据。
标签: javascript node.js amazon-web-services asynchronous