gpt4 book ai didi

javascript map promises里面

转载 作者:行者123 更新时间:2023-12-03 23:33:21 24 4
gpt4 key购买 nike

我有这个代码:

signers.map(async (signer, tx) => {
const address = await signer.getAddress();
console.log(address);
return { account: address, amount: 1 }
})

console.log("awesome");

问题是 awesome 先打印出来。我如何确保在 map 中解决所有 promise 之前,它不会出现在 awesome 中。最干净的方式将不胜感激。

最佳答案

所有异步函数都会返回一个 Promise,该 Promise 在函数主体完成时解析,或者在发生异常时拒绝。

而且,.map() 根本不是 async-aware。它不会暂停循环等待 promise 。因此,您正在同时运行所有异步操作,并且 signers.map() 返回一组 promise 。如果您想知道它们何时全部完成并获得所有这些 promise 的结果,您需要在该 promise 数组上使用 Promise.all()

let promises = signers.map(async (signer, tx) => {
const address = await signer.getAddress();
console.log(address);
return { account: address, amount: 1 }
});

Promise.all(promises).then(results => {
console.log("awesome");
console.log(results);
}).catch(err => {
console.log(err);
});

如果,您真正想做的是一个接一个地串行运行异步操作,然后在包含 async 函数中使用常规 for 循环,因为for 循环是 async-aware 并将暂停循环等待 await

let addresses = [];
for (let signer of signers) {
const address = await signer.getAddress();
console.log(address);
addresses.push({ account: address, amount: 1 });
}
console.log(addresses);

关于javascript map promises里面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66499311/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com