我在循环内填充一个数组,循环完成后需要完整的数组。
我已经尝试过通过Promise或使用计数器来处理所有问题,但是我似乎无法在这里弄清楚窍门。
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次,这不是我想要的。
最佳答案
我相信您可以保证将它链接起来,以确保在上链之前完成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
}
希望这可以帮助!