Promise A+规范以及ES6 Promise 深刻理解

总结

针对前端开发理解 promise/A+规范与ES6 Promise之间的关系

ES6 Promise是基于 promise/A+规范的一种实现。

promise/A+规范出现的缘由与背景

1.通常状况下,当异步请求数据时,咱们不知道请求何时会返回数据,可是在某些时候咱们须要知道数据时何时返回的,而后作一些逻辑处理。这时咱们就须要用到异步回调函数;

2. 当咱们异步回调操做中须要处理的仍是异步回调,这时候就造成了异步回调嵌套,即产生回调地狱。

为了解决上述两种问题,promise/A+规范产生了。

规范的内容是什么

要求
Promise 的状态
一个 Promise 的当前状态必须为如下三种状态中的一种:等待态(Pending)、执行态(Fulfilled)和拒绝态(Rejected)。html

等待态(Pending)
处于等待态时,promise 需知足如下条件:前端

能够迁移至执行态或拒绝态
执行态(Fulfilled)
处于执行态时,promise 需知足如下条件:promise

不能迁移至其余任何状态
必须拥有一个不可变的终值
拒绝态(Rejected)
处于拒绝态时,promise 需知足如下条件:异步

不能迁移至其余任何状态
必须拥有一个不可变的据因
这里的不可变指的是恒等(便可用 === 判断相等),而不是意味着更深层次的不可变(译者注: 盖指当 value 或 reason 不是基本值时,只要求其引用地址相等,但属性值可被更改)。函数

Then 方法
一个 promise 必须提供一个 then 方法以访问其当前值、终值和据因。this

promise 的 then 方法接受两个参数:htm

1
promise.then(onFulfilled, onRejected)
参数可选
onFulfilled 和 onRejected 都是可选参数。对象

若是 onFulfilled 不是函数,其必须被忽略
若是 onRejected 不是函数,其必须被忽略
onFulfilled 特性
若是 onFulfilled 是函数:blog

当 promise 执行结束后其必须被调用,其第一个参数为 promise 的终值
在 promise 执行结束前其不可被调用
其调用次数不可超过一次
onRejected 特性
若是 onRejected 是函数:开发

当 promise 被拒绝执行后其必须被调用,其第一个参数为 promise 的据因
在 promise 被拒绝执行前其不可被调用
其调用次数不可超过一次
调用时机
onFulfilled 和 onRejected 只有在执行环境堆栈仅包含平台代码时才可被调用 注1

调用要求
onFulfilled 和 onRejected 必须被做为函数调用(即没有 this 值)注2

屡次调用
then 方法能够被同一个 promise 调用屡次

当 promise 成功执行时,全部 onFulfilled 需按照其注册顺序依次回调
当 promise 被拒绝执行时,全部的 onRejected 需按照其注册顺序依次回调
返回
then 方法必须返回一个 promise 对象 注3

1
promise2 = promise1.then(onFulfilled, onRejected);
若是 onFulfilled 或者 onRejected 返回一个值 x ,则运行下面的 Promise 解决过程:[[Resolve]](promise2, x)
若是 onFulfilled 或者 onRejected 抛出一个异常 e ,则 promise2 必须拒绝执行,并返回拒因 e
若是 onFulfilled 不是函数且 promise1 成功执行, promise2 必须成功执行并返回相同的值
若是 onRejected 不是函数且 promise1 拒绝执行, promise2 必须拒绝执行并返回相同的据因

ES6 Promise 实现

新增了 resolve,reject,all,race,finally等方法属性

参考:

https://www.ituring.com.cn/article/66566

https://www.cnblogs.com/qq666666/p/7476292.html

相关文章
相关标签/搜索