【发布时间】:2018-05-03 23:50:15
【问题描述】:
我创建了 3 个 promise,p1,p3 解决,而 p2 拒绝。
代码:
let p1 = new Promise((resolve, reject) => {
resolve(42);
});
let p2 = Promise.reject(43);
let p3 = new Promise((resolve, reject) => {
resolve(44);
});
let p4 = Promise.race([p1, p2, p3]);
p4.catch((value) => {
console.log(value);
});
根据代码,p4 应该返回 43,因为 p3 比 p1 和 p2 运行得更快。当我在节点中运行时,它没有返回。 在 Promise.race 中如何解释这种情况?
注意:请在控制台中运行此代码然后回答它。 它不会返回我本地的任何内容。
【问题讨论】:
-
@ibowankenobi ,我刚刚看了那个帖子,Promise.race 没有代码
-
订单不可信赖。您不能说 p3 甚至 p1 会比另一个运行得更快。您在事件循环的同一滴答声中评估了 4 个表达式,有一个单独的承诺微任务队列,您不能说哪个会运行得更快。
-
Np,祝你的项目好运。
-
现在你可能发现你正在传递已解决或已拒绝的承诺,
Promise.race将返回它找到的第一个已解决或已拒绝的承诺,因此let p4 = Promise.race([p2,p1, p3]);将在catch中记录一些内容。如果您需要一个返回第一个承诺的函数,如果所有承诺都拒绝,则该承诺将解决或拒绝,您可以尝试this
标签: javascript node.js promise es6-promise