Promise的理解

三个状态:pending(进行中)、fulfilled(已成功)和rejected(已失败);
状态变化:pending ---> fulfilled 或 pending --> rejected (变化不可逆);

then 和 catch 对状态的影响:

then 和 catch 正常状态都会返回 fulfilled,里面有报错则返回 rejected

Promise解决多次调用的面条式代码

将每个异步操作封装在一个Promise对象中,并通过Promise的then方法来处理异步操作的结果。
将多个Promise对象组合成一个Promise链。在Promise链中,每个Promise对象的结果都依赖于上一个Promise对象的结果。可以通过返回一个新的Promise对象来实现Promise链。
在Promise链中,可以使用Promise的catch方法来处理错误信息。如果任何一个Promise对象出错,整个Promise链都会立即终止,并且会跳过后续的Promise对象。

.all方法

Promise.all([a,b,c...])
传入 Promise 数组,等待全部的 Promise 都 fulfilled 后,返回新的 Promise,包含所有的结果。一个失败,就返回失败。
.all的作用是使多个异步操作并行执行,并等待所有异步操作都完成后再进行下一步操作。它接收一个Promise对象数组作为参数,并返回一个新的Promise对象。当所有的Promise对象都完成时,会变为fulfilled状态,并且会将所有Promise对象的结果组成一个数组传递给它的then方法;如果其中任何一个Promise对象被rejected,则返回的Promise对象会立即变为rejected状态,并且会将第一个被rejected的Promise对象的错误原因传递给它的catch方法。

.rece方法

Promise.race([a,b,c...])
传入Promise 数组,只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变,如果第一个就是失败了,就返回rejected。
.race的作用是允许在多个异步操作中只取最快的结果,从而加速整个异步流程。

Promise 优缺点:

优点:实现链式调用,避免了层层嵌套的回调函数。
Promise 对象提供统一的接口,使异步操作更加容易控制。
可以同时执行多个异步操作,结果返回后统一处理。
缺点:一旦开始执行就无法取消;
无法进度追踪,当处于 Pending 状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。

作者:刘国伟

原文地址:https://www.cnblogs.com/DTCLOUD/p/17440620.html