Promise

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 对象。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值