我知道
throw
内部存在 promise
,将该特定承诺的状态更改为 rejected
,结果将是 error
消息,但是当我在 内部键入此
throw
时setTimeout
位于promise
内部,throw
不会修改promise
的状态和结果,一开始我以为setTimeout
可能有问题,但我尝试了resolve()
和 reject()
在那setTimeout
里面,我收到了预期的结果。所以我想知道为什么 throw
位于 setTimeout
内的 promise
会发生这种情况?
代码:
const test = new Promise((resolve, reject) => {
setTimeout(() => {
throw new Error("error");
}, 2000)
});
//output after 2 sec: [[PromiseState]]: pending
//[[PromiseResult]]: undefined;
const test = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("success");
}, 2000)
});
//output after 2 sec:[[PromiseState]]: fulfilled
//[[PromiseResult]]: success
错误在
setTimeout
回调函数的上下文中抛出,并且仅存在于该上下文中。
Promise 不知道回调中发生了什么,直到/除非你让它调用
resolve
或 reject
。