es6 promise
Promise是为解决什么问题而产生的?
promise是为解决异步处理回调金字塔问题而产生的
Promise的两个特点
1、Promise对象的状态不受外界影响
1)pending 初始状态
2)resolve 成功状态
3)reject 失败状态
Promise 有以上三种状态,只有异步操作的结果可以决定当前是哪一种状态,其他任何操作都无法改变这个状态
2、Promise的状态一旦改变,就不会再变,任何时候都可以得到这个结果,状态不可以逆,只能由 pending变成resolve或者由pending变成reject
Promise的三个缺点
1)无法取消Promise,一旦新建它就会立即执行,无法中途取消
2)如果不设置回调函数,Promise内部抛出的错误,不会反映到外部
3)当处于pending状态时,无法得知目前进展到哪一个阶段,是刚刚开始还是即将完成
Promise在哪存放成功回调序列和失败回调序列?
1)onResolvedCallbacks 成功后要执行的回调序列 是一个数组
2)onRejectedCallbacks 失败后要执行的回调序列 是一个数组
以上两个数组存放在Promise 创建实例时给Promise这个类传的函数中,默认都是空数组。
每次实例then的时候 传入 onFulfilled 成功回调 onRejected 失败回调,如果此时的状态是pending 则将onFulfilled和onRejected push到对应的成功回调序列数组和失败回调序列数组中,如果此时的状态是fulfilled 则onFulfilled立即执行,如果此时的状态是rejected则onRejected立即执行
catch捕获错误
promise.all 返回的是一个promise事例所以需要all里的都执行完后才会有then方法
promise.race 适用的场景,只要有一个图片加载完就显示先加载完的一张图片就可以,先到先得
版权声明:本文由Web学习之路发布,如需转载请注明出处。