gpt4 book ai didi

javascript - 运行 2 个 promise 并等待 "done()"

转载 作者:行者123 更新时间:2023-11-29 18:16:44 26 4
gpt4 key购买 nike

我正在尝试同时使用 promises(使用 Q.js)运行两个不同的函数,并等待两者的响应以运行第三个操作。

我想要这样的东西:

run( promise1, promise2).done( callbackForBoth );

我该怎么办?

最佳答案

您可以使用 Q.all函数,像这样

Q.all([promise1, promise2]).then(callbackForBoth);

通常,Q.all 后跟.spread 便捷方法,它传播Q.all 调用的结果,如函数参数,像这样

Q.all([promise1, promise2]).spread(function(pro1result, pro2result) {
return callbackForBoth();
});

但是这个方法的问题是,如果任何一个 promise 被拒绝,那么其余的 promise 将不会被调用。

所以,如果你想确保所有的 promise 都被履行/拒绝,你可以使用 Q.allSettled在那种情况下

Q.allSettled([promise1, promise2]).then(callbackForBoth);

这里我们也可以使用spread 便捷方法,但粒度更细一些。对于每个 promise ,我们都会得到一个对象,该对象具有一个 state 属性,让后续的消费者知道该 promise 是被履行还是被拒绝。所以,您可能想像这样使用价差

Q.allSettled([promise1, promise2]).spread(function(pro1result, pro2result) {
if (pro1result.state === "fulfilled" && pro2result.state === "fulfilled") {
return callbackForBoth();
} else {
throw new Error("Not all of them were successful");
}
});

关于javascript - 运行 2 个 promise 并等待 "done()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22613338/

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