Promise链式调用

  • Post author:
  • Post category:其他



promise 详解

promise对象是一个构造函数,用于生成Promise实例。对象状态不受外界影响,只有异步操作的结果才能决定当前是哪一种状态。三种状态:pending(进行中)、fulfilled(已成功)、rejected(已失败)。实例生成以后,用then方法分别指定resolved状态和rejected状态的回调函数


Promise的链式调用

先看一段代码:

你可能想到的结果是12345,可是打印结果是:1,2,3,5,4

Why?


结论

0. 回调是异步的

1

.

当执行 then 方法时,如果前面的 promise 已经是 resolved 状态,则直接将回调放入微任务队列中(但是执行回调还是要等到所有同步任务都结束后)

2.当一个 promise 被 resolve 时,会遍历之前通过 then 给这个 promise 注册的所有回调,将它们依次放入微任务队列中

3.resolve()它的作用除了将当前的 promise 由 pending 变为 resolved,还会遍历之前通过 then 给这个 promise 注册的所有回调,将它们依次放入微任务队列中,

很多人以为是由 then 方法来触发它保存回调,而事实上 then 方法即不会触发回调,也不会将它放到微任务,then 只负责注册回调,

由 resolve 将注册的回调放入微任务队列,由事件循环将其取出并执行。

4.对于

then 方法返回的 promise 它是没有 resolve 函数的

,取而代之只要 then 中回调的代码执行完毕并

获得同步返回值

,这个 then 返回的 promise 就算被 resolve



同步返回值


的意思换句话说,如果 then 中的回调返回了一个 promise,那么 then 返回的 promise 会等待这个 promise 被 resolve 后再 resolve。执行完3, then 中要到下一个循环才能执行。

至此全部结束。

还有一个关于执行顺序的题目解析,共同学习。



版权声明:本文为ywCSD原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。