如何保持同步的代码时有循环的内部异步调用
我填一个循环中的数组,我需要全阵列时,循环结束。
我试着通过承诺或用计数器处理一切,但我似乎无法在这里弄清楚的伎俩。
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
}
希望这可以帮助!