为什么在 Promise 内部的 setTimeout 内部抛出异常,不会改变输出 Promise 的状态和结果?

问题描述 投票:0回答:1

我知道

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
javascript promise settimeout throw
1个回答
0
投票

错误在

setTimeout
回调函数的上下文中抛出,并且仅存在于该上下文中。

Promise 不知道回调中发生了什么,直到/除非你让它调用

resolve
reject

© www.soinside.com 2019 - 2024. All rights reserved.