race和any

一、关系

any是对race的补充:尽可能等一个fulfilled的结果

二、区别

场景
Promise.race()
Promise.any()

全fulfilled

onResolve,返回最早的fulfilled

onResolve,返回最早的fulfilled

fulfilled+rejected

不定,返回最早的rejected/fulfilled

onResolve,返回最早的fulfilled

全rejected

onRejected,返回最早的rejected

onRejected,返回所有的rejected

三、详解

1、Promise.race([promise, promise2, ...])

  • 并发,返回最早完成的那个任务的结果;

  • 始终返回最早的那个任务:如果fulfiled则执行onResolve,如果rejected则执行onReject

let p1 = new Promise(function (resolve, reject) {
  setTimeout(resolve, 500, "one");
});
let p2 = new Promise(function (resolve, reject) {
  setTimeout(reject, 100, "two");
});

Promise.race([p1, p2]).then(
  (value) => {
    console.log("onResolve: ", value);
  },
  (reason) => {
    console.log("onRejected: ", reason);
  }
);

输出:

2、Promise.any([promise, promise2, ...])

  • 尽可能返回fulfiled的任务的结果

  • 只要有一个fulfiled的任务,则执行onResolve;只有全都rejected时才执行onReject

输出:

四、手写

1、Promise.race

2、Promise.any

Last updated