在ES6中,新增了Promise这个类,Promise用于处理一些需要花费长时间的任务,进行异步处理, 一般是说解决了回调地狱的问题。因为Promise是一个类,所以需要new Promise来使用。
promise是用来处理多层嵌套的回调函数,它有三种状态:pending(进行中)、resolve(完成)、reject(失败)。
如果成功,即从pending转为resolve,此时执行reslve函数
如果失败,即从pending转为reject,此时执行reject函数。
Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果,这时就称为 resolved(已定型)。如果改变已经发生了,你再对Promise对象添加回调函数,也会立即得到这个结果。
Promise.all():等待机制
promise.all()方法会发起并行的 Promise 异步操作,等所有的异步操作全部结束后并且执行结果都是成功的时候才会执行下一步的 .then 操作。
var p = Promise.all([p1, p2, p3]);
(1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时p1、p2、p3的返回值组成一个数组,传递给p的回调函数。
(2)只要p1、p2、p3之中有一个被rejected,p的状态就变成rejected,此时第一个被reject的实例的返回值,会传递给p的回调函数。
Promise.race():赛跑机制
Promise.race()
方法会发起并行的 Promise 异步操作,只要任何一个异步操作完成,就立即执行下一步的 .then 操作。