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()
中,而是执行
返回值
而不是
解析值
?是的,这是我的猜测!是的,另一种选择是使用
返回异步函数。然后(…等等…
我的意思是,我现在有
解析(值)
等等,使用
返回(值)