【发布时间】:2022-01-01 12:03:00
【问题描述】:
我有一个函数需要以严格的顺序执行多个承诺,如果任何一个失败,整个函数都需要出错。我知道我应该使用 Try...Catch 块来捕获任何抛出的异常。
目前,我正在使用嵌套的 try...catch,例如:
try {
try {
code1()
} catch(err) {
console.log("Inner 1 ", err)
throw err
}
try {
code2()
} catch(err) {
console.log("Inner 2 ", err)
throw err
}
} catch(err) {
console.log("Outer", err)
} finally {
console.log("Full Success")
}
这里的意图是如果code1() 或code2() 失败,外部catch 将触发。如果code1 和code2 都成功,则外部finally 块将触发。
但是,现在看来,无论code1 或code2 是否成功,除了相关的内部catch 语句之外,外部finally 总是被触发。
有没有办法让外部catch触发?
【问题讨论】:
-
finally无论内部发生什么都会执行。 -
@Barmar 哎呀……我对文档的阅读让我相信它只有在成功时才能执行……
-
来自MDN:在try语句完成后执行的语句。无论是否抛出或捕获异常,这些语句都会执行。
-
@Barmer 是的,重新阅读后意识到我的错误。我停在第一句话...
-
Python 在它的
else:块中有你想要的。
标签: javascript exception try-catch