Promise A+规范中的then()方法
2020-08-22 本文已影响0人
baixin
var promise = new Promise(fn);
promise.then(onFulfilled, onRejected);
1.这两个onFulfilled和onRejected可选的参数;如果不是函数,则将其忽略;
2.如果onFulfilled是一个函数;
- 必须在promise实现后调用,以promise的值(resolve())作为onFulfilled的第一个参数。
- 在promise实现之前不能调用它。
- 它不能被多次调用
3.如果onRejected是一个函数,
- 必须在promise被拒绝之后,以promise的reject作为第一个参数调用它。
- 在promise被拒绝之前不能调用它。
- 它不能被多次调用。
4.onFulfilled或onRejected在放入执行上下文(JS引擎的执行环境)堆栈之前不得调用。。
5.onFulfilled并且onRejected必须作为函数调用(即没有this值)
6.then 可能在同一promise中多次被调用
- 各自的onFulfilled或onRejected会按调用顺序执行;
7.then必须返回新的Promise
promise2 = promise1.then(onFulfilled, onRejected);
- 如果有一个onFulfilled或onRejected返回一个值x,则promise2得到一个值为x的新promise,完成状态是已完成。
- 如果任何一个onFulfilled或onRejected引发异常e,则promise2得到一个值为e的新promise,完成状态是被拒绝。
- 如果onFulfilled不是函数且promise1已完成,则promise2必须使用与相同的值来实现promise1。
- 如果onRejected不是功能而promise1被拒绝,则promise2必须以与相同的理由将其拒绝promise1。
以上部分内容翻译自Promise A+规范,更全面更详细的请参考此文档;