Javascript 如果在承诺链的某个点抛出错误,它是否会自动传播到整个承诺链?
假设你有这样一个承诺链:Javascript 如果在承诺链的某个点抛出错误,它是否会自动传播到整个承诺链?,javascript,asynchronous,promise,es6-promise,asynchronous-javascript,Javascript,Asynchronous,Promise,Es6 Promise,Asynchronous Javascript,假设你有这样一个承诺链: asyncFunction() .then((value) => { resolve(value) }) .then((value) => { resolve(value) }) .then((value) => { resolve(value) }) .catch((error) => { reject(error) }) 如果在其中一个函数调用期间抛出错误,该错误是否会自动传播到链末尾的catch?假设错误在
asyncFunction()
.then((value) => {
resolve(value)
})
.then((value) => {
resolve(value)
})
.then((value) => {
resolve(value)
})
.catch((error) => {
reject(error)
})
如果在其中一个函数调用期间抛出错误,该错误是否会自动传播到链末尾的
catch
?假设错误在开始时抛出,在asyncFunction()
期间,它传播的确切机制是什么?是否将错误传递给每个的处理程序,然后
?或者每个处理器都在寻找第二个处理程序,而没有看到一个,因此将错误传递给下一个然后?是的,它将向下传播,直到到达第一个捕获。应跳过所有then
子句
我注意到使用了resolve()
和reject()
避免这种情况,在这种情况下不需要承诺构造函数模式。错误被链中的下一个catch
块捕获。您尝试过吗?请避免。这是否回答了您的问题?2个问题:1)当你说它被传播到下一个捕获时,你的意思是如果抛出错误,它只是跳过,然后s?我不明白你所说的决心和拒绝是什么意思。你能详细说明一下吗?是的。2) resolve()和reject()函数建议您将其包装在newpromise()
中。你不需要这样做。只需从函数返回链而不是“new promise”。让我确保我理解:resolve和reject可用这一事实意味着整个代码块都包装在new promise()
中,对吗?因此,另一种选择是不将其包装在newpromise()
中,而是执行返回值
而不是解析值
?是的,这是我的猜测!是的,另一种选择是使用返回异步函数。然后(…等等…
我的意思是,我现在有解析(值)
等等,使用返回(值)
?