Promise

一、Promise实例的状态

  • pedding         初始的状态,即等待
  • rejected          返回的promise对象属性值,代表失败
  • fulfilled         返回的promise对象属性值,代表成功

以上状态保存在实例属性的PromiseState中,同样的也有一个实例属性PromiseResult保存执行结果。

 

二、改变Promise对象状态?

  1. 调用 resolve 函数(状态是成功)
  2. 调用 reject 函数(状态是失败)
  3. 使用throw关键字抛出异常(状态是失败)
  4. 构造函数生成的结果值跟return内容无关,只和resolve和reject函数有关;

有特殊的情况,见原型中的方法

 

三、静态方法和原型上的方法

  then:参数一是成功状态要执行的函数,参数二是失败状态要执行的函数。then方法的返回值是一个promise实例对象,该对象默认为成功状态,该实例对象的结果值是return的内容或者reuturn一个Promise对象的成功状态;另外一种状态是失败状态,通常抛出错误或者reutrn一个Promise对象的失败状态

  resolve如果参数不是Promise函数,则都是成功状态;如果是Promise函数,则看这个Promise返回的状态,如果返回reject()函数,则是失败状态,那么外层的resolve函数的返回结果也是失败状态的Promise函数。

  reject无论传入什么,返回结果都是失败状态的Promise函数。

  catch:仅对失败状态的Promise函数进行处理

  all: 有一个array参数,里面是Promise函数的实例对象,如果他们都是成功,则该方法返回值是成功;如果有一个失败,则该方法返回值是失败。

    race:和all方法类似,只不过返回的结果是根据第一个Promise实例对象的状态决定。

 

四、其他情况

  Q:可以执行多个回调函数吗?

  可以的。

  Q: 什么是异常穿透?

  在串联调用的时候(then方法),把catch方法放在最后一个then方法后,它会捕捉到上面的Promise调用链最后一个返回的失败结果

  Q: 如何中断Promise链?(不往下执行then方法)

  返回一个pedding状态的Promise对象。

 

 

五、附加:async和await

  1. await 只能放在async修饰的函数中,await 会等待右侧返回的promise函数状态改变(其中必须包含promise对象,也可以跟任意表达式,但是没有什么用),同时会暂停后续代码的执行。return 会改变返回的Promise对象的PromiseResult值。

  2. async 修饰的函数返回值一定是隐式返回Promise对象。

   3. 返回的promise对象状态

        返回的promise对象为成功状态的方式:  

        • return 或 await 成功状态Promise对象,结果值只能通过return返回出来;
        • 没有任何返回操作,结果值为undefiend;
      •  

               返回的promise对象为失败状态的方式:   

        •  return 或 await 失败的promise对象,结果值取决于传入resolve方法的内容;
        •  抛出一个错误,其promise结果值为undefiend;

 

   注意:await只能在async修饰的函数中使用,而async修饰的函数中可以没有await

 

posted @ 2023-03-10 17:56  青年路的代码工程师  阅读(17)  评论(0)    收藏  举报