【发布时间】:2020-11-13 07:37:27
【问题描述】:
我不明白为什么下面的代码没有抛出:
const main = async () => {
const Stop = (time) => new Promise((resolve) => setTimeout(resolve, time))
try {
const p1 = Stop(500).then(() => { throw new Error('Error ocurred') })
const p2 = Stop(1000)
await p1
await p2
} catch (err) {
console.log('error catched')
}
}
main()
但每当我颠倒 p1 和 p2 承诺的顺序时,就像这样:
const main = async () => {
const Stop = (time) => new Promise((resolve) => setTimeout(resolve, time))
try {
const p1 = Stop(500).then(() => { throw new Error('Error ocurred') })
const p2 = Stop(1000)
await p2
await p1
} catch (err) {
console.log('error catched')
}
}
main()
然后抛出未捕获的异常。我认为在没有 .catch 函数的情况下执行类似的并发任务是危险的,但我认为 try catch 中的异步代码永远不会抛出。
为什么不是这样呢?
【问题讨论】:
-
两个 sn-ps 日志 “错误捕获”
-
@adiga 打开真正的浏览器控制台,第二个也会登录
Uncaught (in promise) Error -
@Barmar 你是对的,对不起 OP
-
没问题!我想澄清一下,不是我不明白为什么会出现捕获的错误,而是第二个示例失败的原因。
标签: javascript concurrency async-await try-catch