promise处于pending状态,为何仍然执行了then中的方法
function test() {
return new Promise((resolve, reject)=>{
resolve(123);
});
}
test().then((a)=>{
console.log(a);
}).then((b)=> {
console.log(b);//这行代码被执行了
});
test().then()返回的是一个处于pending状态的promise对象,为什么会执行then中的console.log(b)呢?不是只有被resolve的promise对象才会执行then中的第一个方法吗?
2 回复
test().then(onFulfilled),直接使用 onFulfilled 的返回值来 Resolve 该 Promise,只要你没有抛出错误:
// promise1 是父级 Promise,这里是 test() ,promise2 是子级 Promise,这里是 test.then()
try {
value = handler(promise1.value) // handler 即为then方法添加的 onFulfilled 或者 onReject 的回调函数
} catch(e) {
promise2.reject(e)
continue
}
doResolve(promise2, value) // 只要没抛出错误,则使用 then 方法内回调的返回值 Resolve 该 Promise,也就是 test().then()
具体的代码可以查看这个 KPromise
@Keifergu 嗦嘎,原来会将返回值作为resolve的内容,涨姿势了