Promise
大约 2 分钟
Promise
1.术语
promise是一个有then 方法的对象或者是函数
thenable是一个有then 方法的对象或者是函数
value 是promise状态成功时的值,也就是resolve 的参数,表示结果的数据
exception是一个使用throw抛出的异常值
reason是表示承诺被拒绝的原因的值
2.要求
2.1.promise状态
promise必须处于以下三种状态之一:pedding(待定),fulfiled(已完成)或rejected (已拒绝)。

- 当处于
pedding时,promise:
可能会转变为fulfiled或rejected。
- 当
promise实现时:
它的状态就不能再改变。
必须有一个value,并且该value不能改变。
- 当被
rejected时,promise:
它的状态就不能再改变。
必有其reason,且该reason不可改变。
这里的“不能再改变”是指不可变的身份(即===),但并不意味着深层的不变性。
- 可以针对任务进行后续处理,完成状态的后续处理称为
onFulfilled,而失败状态的后续处理称为onRejected。这两个参数都是函数类型,并会在 Promise 变为fulfilled或rejected状态时被调用。

2.2.then
promise必须提供一种then方法来访问其当前或最终的value或reason。
promise.then(onFulfilled, onRejected)onFulfilled和都是onRejected可选参数- 如果
onFulfilled不是一个函数,则必须将其忽略。 - 如果
onRejected不是一个函数,则必须将其忽略。
- 如果
- 如果
onFulfilled是一个函数promise它必须fulfilled后被调用,并以promise的value作为其第一个参数。promise在fulfilled之前不能调用它。- 它不能被调用多次。
- 如果
onRejected是一个函数promise它必须在被onRejected后被调用,并以promise的reason作为其第一个参数。promise在被onRejected之前一定不能调用它。- 它不能被调用多次。
onFulfilled和onRejected必须在执行上下文栈为空时调用,这意味着它们应该在下一个事件循环中执行。- then 方法必须返回一个新的 Promise
Promise的静态方法
| 方法名 | 含义 |
|---|---|
| Promise.resolve(data) | 直接返回一个完成状态的任务 |
| Promise.reject(reason) | 直接返回一个拒绝状态的任务 |
| Promise.all(任务数组) | 返回一个任务 |
| 任务数组全部成功则成功 | |
| 任何一个失败则失败 | |
| Promise.any(任务数组) | 返回一个任务 |
| 任务数组任一成功则成功 | |
| 任务全部失败则失败 | |
| Promise.allSettled(任务数组) | 返回一个任务 |
| 任务数组全部已决则成功 | |
| 该任务不会失败 | |
| Promise.race(任务数组) | 返回一个任务 |
| 任务数组任一已决则已决,状态和其一致 | |
