你可以打Promise.all()
:00等候.
await Promise.all([someCall(), anotherCall()]);
要存储结果,请执行以下操作:
let [someResult, anotherResult] = await Promise.all([someCall(), anotherCall()]);
请注意,Promise.all
很快就会失败,这意味着一旦提供给它的一个promise 被拒绝,那么整个promise 就会被拒绝.
const happy = (v, ms) => new Promise((resolve) => setTimeout(() => resolve(v), ms))
const sad = (v, ms) => new Promise((_, reject) => setTimeout(() => reject(v), ms))
Promise.all([happy('happy', 100), sad('sad', 50)])
.then(console.log).catch(console.log) // 'sad'
相反,如果你想等待所有promise 兑现或拒绝,那么你可以使用Promise.allSettled
.请注意,Internet Explorer本机不支持此方法.
const happy = (v, ms) => new Promise((resolve) => setTimeout(() => resolve(v), ms))
const sad = (v, ms) => new Promise((_, reject) => setTimeout(() => reject(v), ms))
Promise.allSettled([happy('happy', 100), sad('sad', 50)])
.then(console.log) // [{ "status":"fulfilled", "value":"happy" }, { "status":"rejected", "reason":"sad" }]
Note:如果您使用了Promise.all
个在拒绝发生之前成功完成的操作,则不会回滚,因此您可能需要注意这种情况.例如