1

总结

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

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

promise/A+规范出现的原因与背景

1.一般情况下,当异步请求数据时,我们不知道请求什么时候会返回数据,但是在某些时候我们需要知道数据时什么时候返回的,然后做一些逻辑处理。这时我们就需要用到异步回调函数;

2. 当我们异步回调操作中需要处理的还是异步回调,这时候就形成了异步回调嵌套,即产生回调地狱。

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

规范的内容是什么

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

等待态(Pending)
处于等待态时,promise 需满足以下条件:

可以迁移至执行态或拒绝态
执行态(Fulfilled)
处于执行态时,promise 需满足以下条件:

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

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

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

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

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

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

当 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

这有一个错误
28 声望1 粉丝

!盗版前端工程师


« 上一篇
vue 问题集

引用和评论

0 条评论