当前位置:首页 > ES6 > 正文内容

es6 promise

自由小鸟6年前 (2019-08-06)ES62381

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立即执行



image.png

catch捕获错误

image.png



image.png

image.png

promise.all 返回的是一个promise事例所以需要all里的都执行完后才会有then方法




promise.race 适用的场景,只要有一个图片加载完就显示先加载完的一张图片就可以,先到先得

image.png


image.png

版权声明:本文由Web学习之路发布,如需转载请注明出处。

本文链接:https://webge.net/?id=56

“es6 promise” 的相关文章

js 数据保护

js 数据保护

es3的写法利用构造函数闭包来实现属性不可编辑es5的写法用一个defineProperty 来实现只可读 writable:falsees6的实现,代理new Proxy来实现,思想和es3很像,操作是代理对象person...

es6数值扩展

Number.isFinite    函数用于检查其参数是否是无穷大es6 只对数字操作,如果不是数字就返回falseisFinite(25) // true Number.isFinite(25) // trueisFinite("25"...

es6 类

类的概念(基本语法,继承关系,静态方法,表态属性)类还提供了getter  setter{//基本定义和生成实例class Parent{constructor(name='mukewang'){this.name=name;}}}{//继承class Parent{con...