Promise all race any 区别
Promise对象有以下两个特点。
(1)对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是Promise这个名字的由来,它的英语意思就是“承诺”,表示其他手段无法改变。
(2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。
1. Promise.all([p1,p2])
接收一个数组 Promise.all([p1,p2]),同时处理多个请求,返回一个数组 结果和传入的顺序一致,如果其中一个失败就会走reject 返回失败的结果 all方法的效果实际上是「谁跑的慢,以谁为准执行回调」
2. Promise.race([p1,p2])
race「谁跑的快,以谁为准执行回调」,参数为数组 谁先出结果 就返回谁的结果 不管成功失败 谁先结束就是谁
3. Promise.allSettled([p1,p2])
出现错误时不停止,而是继续执行。走then 不会进入catch
4. Promise.any([p1,p2])
接收一个Promise对象的集合,当其中的一个 promise 成功,就返回那个成功的promise的值。只返回最先成功的
5. Promise.reject(reason)
resolve 唯一的不同是,返回的 promise 对象的状态为 rejected。
const thenable = {
then(resolve, reject) {
reject('出错了');
}
};
Promise.reject(thenable)
.catch(e => {
console.log(e === thenable)
})
6. Promise.resolve(value)
返回一个状态由给定value决定的Promise对象。
如果该值是thenable(即,带有then方法的对象),返回的Promise对象的最终状态由then方法执行决定;
否则的话(该value为空,基本类型或者不带then方法的对象),返回的Promise对象状态为fulfilled,并且将该value传递给对应的then方法。
通常而言,如果您不知道一个值是否是Promise对象,使用Promise.resolve(value) 来返回一个Promise对象,这样就能将该value以Promise对象形式使用。
参数不是具有then方法的对象,或根本就不是对象
Promise.resolve('foo')
//等价于
let p = new Promise(resolve => resolve('foo'))
p.then(res => {
console.log(res);
})
//参数是一个thenable对象
let obj = {
then: (resolve, reject) => {
// resolve(222)
reject(333)
}
}
let p = Promise.resolve(obj)
p.then(res => {
console.log(res, succ); //222 succ
}).catch(err => {
console.log(err, 'err'); //333 err
})
不带有任何参数
Promise.resolve方法允许调用时不带参数,直接返回一个resolved状态的 Promise 对象。