Promise.any()和Promise.race对比

发布时间 2023-08-03 17:35:16作者: 崛起崛起

只要参数实例有一个变成fulfilled状态,包装实例就会变成fulfilled状态;如果所有参数实例都变成rejected状态,包装实例就会变成rejected状态。
Promise.any()跟Promise.race()方法很像,只有一点不同,就是Promise.any()不会因为某个 Promise 变成rejected状态而结束,必须等到所有参数 Promise 变成rejected状态才会结束。

var p1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'one');
});
var p2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, 'two');
});
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, 'two');
});
Promise.any([p1, p2, p3]).then(values => {
  console.log(values,'values');
}, reason => {
  console.log(reason,'reason')
})
结果:one,'values'
var p1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'one');
});
var p2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, 'two');
});
var p3 = new Promise((resolve, reject) => {
  reject('reject');
});
Promise.any([p1, p2, p3]).then(values => {
  console.log(values,'values');
}, reason => {
  console.log(reason,'reason')
})
结果:one,'values'

promise.any()
var p1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 4000, 'one');
});
var p2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, 'two');
});
var p3 = new Promise((resolve, reject) => {
  reject('reject');
});

Promise.race([p1, p2, p3]).then(values => {
  console.log(values,'values');
}, reason => {
  console.log(reason,'reason')
});
结果:reject,'reason'
var p1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 1000, 'one');
});
var p2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 2000, 'two');
});
var p3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 3000, 'two');
});
Promise.race([p1, p2, p3]).then(values => {
  console.log(values,'values');
}, reason => {
  console.log(reason,'reason')
})
结果:one,'values'