var promise1 = new Promise((resolve, reject) => {reject();});
promise1
.then(null, function() {
return 123;
})
.then(null, null)
.then(null, null)
.then(
(val) => {
console.log('promise2 已完成:' + val);
},
(val) => {
console.log('promise2 已拒绝:' + val);
});
结果:promise2 已完成: 123
解答:根据规范的说明来的
- onFulfilled 和 onRejected 必须被作为普通函数调⽤(即⾮实例化调⽤,这样函数内部 this ⾮严 格模式下指向 window)
- then ⽅法可以被同⼀个 promise 调⽤多次 当 promise 成功执⾏时,所有 onFulfilled 需按照其注册顺序依次回调 当 promise 被拒绝执⾏时,所有的 onRejected 需按照其注册顺序依次回调
- then ⽅法必须返回⼀个 promise 对象 promise2 = promise1.then(onFulfilled, onRejected);
- 只要 onFulfilled 或者 onRejected 返回⼀个值 x ,promise 2 都会进⼊ onFulfilled 状态
- 如果 onFulfilled 或者 onRejected 抛出⼀个异常 e ,则 promise2 必须拒绝执⾏,并返回 拒因 e
- 如果 onFulfilled 不是函数且 promise1 状态变为已完成, promise2 必须成功执⾏并返回相同的值
- 如果 onRejected 不是函数且 promise1 状态变为已拒绝, promise2 必须执⾏拒绝回调并返 回相同的据因