关于Promise的一些零碎知识

95 阅读2分钟

Promise的状态

1. 一旦通过new Promise创建任务后,任务的状态就处于pending状态(挂起)。

eg:

image.png

2.如果promise任务中调用了resolve函数或者reject函数。那么promise的任务就会变成fulfilled或者rejected。且任务状态一旦确定,则不可逆。取决与先调用哪个函数。

eg:

此任务0秒后调用了resolve函数后promise这个任务状态就会变成fulfilled。

image.png

Promise的后续操作

1.针对任务完成的状态后可以有后续的操作--->用then函数进行相关的操作,then函数中可以传入两个实参,两个实参均为函数,如果promise的状态为fulfilled,则then函数会调用第一个函数,若promise的状态为rejected,则then函数会调用第二函数。

eg: 此promise函数的后续操作(then函数)会输出1

image.png

2.一般针对promise任务的失败状态,我们习惯性的选择使用catch函数来执行相关后续操作。

eg:

image.png

Promise的链式调用

1.then方法返回的一定是一个新的promise任务,新任务的状态取决于以下三点:

1)、如果没有对前面的任务的相关后续操作,新任务的状态与前面的任务状态一致。

2)、如果新任务是对前面任务的相关后续操作,且未执行,则新任务的状态为挂起

3)、如果新任务是对前面任务的相关后续操作,且执行完成,执行过程中没有错误,则新任务状态为完成,数据为返回值;如果执行过程中有错,则新任务状态为失败,数据为错误对象。如果返回值为一个新的任务(Promise 3),则新任务的状态与返回的新任务的状态一致;

3)、的例子: 1s后输出的b的状态为rejected

image.png

async与await的零碎知识

1.await必须放在async函数中执行。

2.await 之后的代码会进入执行队列中的微队列中(优先于宏队列执行)

  或者说promise.resolve().then(函数)中的函数会进入微队列(micro queue)
  

单线程是异步产生的原因 事件循环是异步的实现方式