promise处于pending状态,为何仍然执行了then中的方法
发布于 7 年前 作者 overwhats 6001 次浏览 来自 问答
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的内容,涨姿势了

回到顶部