Open zhangsanshi opened 7 years ago
then 方法必须返回一个 promise 对象 注3
promise2 = promise1.then(onFulfilled, onRejected);
如果 onFulfilled 或者 onRejected 返回一个值 x ,则运行下面的 Promise 解决过程:[[Resolve]](promise2, x)
如果 onFulfilled 或者 onRejected 抛出一个异常 e ,则 promise2 必须拒绝执行,并返回拒因 e
如果 onFulfilled 不是函数且 promise1 成功执行, promise2 必须成功执行并返回相同的值
如果 onRejected 不是函数且 promise1 拒绝执行, promise2 必须拒绝执行并返回相同的据因
下面回答是错误的
Promise/A 未定义 then 的细节,在 Promise/A+ 中定义了,参见 https://promisesaplus.com/#point-59,造成了实现方式的不同。
If both resolvePromise and rejectPromise are called, or multiple calls to the same argument are made, the first call takes precedence, and any further calls are ignored.
的意思是比如我在 resolve 里面造成了错误,按照规范错误就是 reject,于是就造成了 resolve 和 reject 都有调用了,这时候最接近错误的then会执行,其他的都会忽略,但不是不执行,会交给发生错误之前的 promise 执行
更改标题的原因是,看了jQuery3 的 更新博客发现实现的规范是 Promise/A+
举个栗子 https://zhangsanshi.github.io/demo/promise.html 目前猜测是 Promise/A 和 Promise/A+ 规范的不同造成的, 稍后再去研究。