为什么 try/catch
的 catch
内部的 return
行为与 .catch
内部的 return
行为不同?
function promise(call, params) {
return new Promise((keep, brk) => {
brk(2)
keep(1)
})
}
async function a() {
try {
var r = await promise()
} catch (e) {
return console.error('a catch e', e)
}
console.log('a after catch')
return r
}
async function b() {
let r = await promise().catch(e => {
return console.error('b catch e', e)
})
console.log('b after catch')
return r
}
a().then(v => console.log('a', v))
b().then(v => console.log('b', v))
返回
a catch e 2
b catch e 2
a undefined
b after catch
b undefined
最佳答案
主要区别在于,正如 @Berji 的评论所指出的,您的 catch 的 return 语句在 a
和 b
中没有相同的封闭父函数。
在
a
中,它直接包含在函数a
内在
b
中,它包含在一个匿名函数内,而该匿名函数本身又包含在函数b
内。
这意味着在后一种情况下,返回的是 b
内部的匿名函数,而不是 b
本身。
这解释了为什么在您的输出中,b after catch
被打印,但不是 a after catch
:a
在控制台日志之前返回被调用。
关于javascript - 在 try/catch 中返回与在 .catch 中返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58903218/