searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

浅谈promise(II)

2023-07-24 09:22:32
4
0

Promise.all()
Promise.all方法用于将多个Promise实例,包装成一个新的Promise实例。

var p = Promise.al1([p1,p2,p3]);


Promise.all方法接受一个数组作为参数, p1、 p2、p3都是Promise对象的实例,如果不是,就会先调用Promis .resolve方法,将参数转为Promise实例,再进一步处理。( Promise .all方法的参数可以不是数组,但必须具有lterator接口,且返回的每个成员都是Promise实例。)
p的状态由p1 .p2 、p3决定,分成两种情况。
(1)只有p1、 p2、 p3的状态都变成 fulfilled,p的状态才会变成 fulfilled,此时 p1 、 p2、 p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、 p3 之中有一个被rejected,p 的状态就变成rejected,此时第一个被reject 的实例的返回值,会传递给p的回调函数。

Promise.race()
Promise.race方法同样是将多个Promise实例,包装成一个新的Promise实例。

var p = Promise.race([p1,p2,p3]);


代码中,只要 p1、 p2、p3之中有一个实例率先改变状态, p的状态就跟着改变。那个率先改变的Promise实例的返回值,就传递给 p的回调函数。
Promise.race方法的参数与Promise.al1方法一样,如果不是Promise实例,就会先调用下面讲到的 Promise.resolve方法,将参数转为Promise实例,再进一步处理。

Promise.resolve()
有时需要将现有对象转为Promise对象,Promise.resolve方法就起到这个作用。

Promise.resolve('test')
// 等价于
new Promise(resolve => resolve('test'))

Promise.resolve方法的参数分成四种情况。

  • 参数是一个Promise实例
    如果参数是Promise实例,那么、Promise.resolve将不做任何修改、原封不动地返回这个实例。
  • 参数是一个thenable对象
    thenable对象指的是具有then方法的对象,比如下面这个对象。
    let thenable = {
    then: function(resolve, reject) {
    resolve(111);
    };

    Promise.resolve方法会将这个对象转为Promise对象,然后就立即执行thenable对象的 then方法。

  • 参数不是具有then方法的对象,或根本就不是对象
    如果参数是一个原始值,或者是一个不具有then方法的对象,则Promise.resolve方法返回一个新的Promise对象,状态为Resolved

  • 不带有任何参数
    Promise.resolve方法允许调用时不带参数,直接返回一个Resolved状态的Promise对象。

Promise.reject()

Promise.reject(reason)方法也会返回一个新的Promise实例,该实例的状态为rejected。它的参数用法与Promise.resolve方法完全一致。

0条评论
0 / 1000
周****乐
4文章数
0粉丝数
周****乐
4 文章 | 0 粉丝