Promise有关API

Promise

promise三种状态

  1. Fulfilled
  2. Rejected
  3. Pending

Promise.resolve

静态方法Promise.resolve(value)可以认为是new Promsie()的快捷方式,比如Promise.resolve(43);可以认为是以下代码的语法糖:

  new Promise(function(resolve) {
   	resolve(43)
   })

这段代码中的resolve(42);会让这个promise对象立即进入成功状态,该方法的返回值也是一个promise对象,我们可以像下面接着对其返回值进行.then调用。

    Promise.resolve(43).then((value) => {console.log(value)})

Promise.resolve作为new Promise()的快捷方式,在进行promise对象的初始化或者编写测试代码的时候都非常方便。

Promise.reject

Promise.reject(error)是和Promise.resolve(value)类似的静态方法,是new Promise()方法的快捷方式。

比如Promise.reject(new Error(“出错了”))就是下面代码的语法糖形式。

    new Promise((resolve, reject) => {
        reject(new Error("出错了"));
    })
    
    Promise.reject(new Error("出错了")).catch(error => {
        console.error(error);
    })

它和Promise.resolve(value)的不同之处在于promise内调用的函数是reject而不是resolve,这在编写测试代码或者进行debug时说不定用得上。

promise chain (promise链)

        function taskA() {
          console.log("taskA");
        }
        function taskB() {
          console.log("taskB");
        }
        function finalTask() {
          console.log("finalTask");
        }
        function rejected(err) {
          console.log(err);
        }
        Promise
            .resolve()
            .then(taskA)
            .then(taskB)
            .catch(rejected)
            .then(finalTask);

上面的promise链执行顺序为:

在这里插入图片描述

若task出现异常时

        function taskA() {
          console.log("taskA");
          throw new Errow("这是一个错误")
        }
        function taskB() {
          console.log("taskB");
        }
        function finalTask() {
          console.log("finalTask");
        }
        function rejected(err) {
          console.log(err);
        }
        Promise
            .resolve()
            .then(taskA)
            .then(taskB)
            .catch(rejected)
            .then(finalTask);
    //最后结果为taskA 报错 finalTask

此时会跳过taskB,按照taskA -> rejected -> finalTask这个流程来处理

promise链中参数的传递

在这里插入图片描述
上面的例子中task都是独立的,只是简单被调用而已,这时如果taskA想给taskB传递一个参数该怎么办那?

        function taskA(count) {
          console.log("taskA", count);
          return count;
        }
        function taskB(count) {
          console.log("taskB", count + 1);
          return count + 1;
        }
        function taskC(count) {
          console.log("taskC", count * 2);
          return count * 2;
        }
        Promise.resolve(1).then(taskA).then(taskB).then(taskC);
    
    //最后结果为
    //taskA 1
    //taskB 2
    //taskC 4

Promise的常用方法

  • Promise.all([]).then(res => {}).catch(err => {}),该方法返回一个Promise实力,只有当[]中的所有promise完成后才会执行,一旦有一个promise被拒绝,则执行失败回调,catch方法会捕捉到首个被执行的reject函数。Promise.all获得的成功结果的数组里面的数据顺序和Promise.all接收到的数组顺序是一致的
  • Promise.allSettled([]).then(results => {});当给定的promise数组中的所有promise被拒绝后会返回一个拒绝的promise数组,与[]一一对应。
  • Promise.any([]).then().catch;当promise数组中有任意一个完成时就会终止,会忽略到所有被拒绝掉的promise,直到第一个promise完成。若传入所有的promise被拒绝则会执行拒绝回调
  • Promise.race([]).then().catch();当promise数组中任意一个promise被拒绝或者成功,则会采用第一个promise作为他的返回值,但其余的promise还是会继续执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值