使用异步/等待,我尝试了两种不同的语法:
async function asyncFunc() {
return new Promise((resolve, reject) => {
setTimeout(() => {
reject('promise rejected')
}, 500);
});
}
async function asyncCallWithoutTryCatchBlock() {
await asyncFunc().catch((err) => {
console.log('Catching error');
return;
});
console.log('Outside, after catch is called');
}
async function asyncCallWithTryCatchBlock() {
try {
await asyncFunc();
} catch(err) {
console.log('Catching error');
return;
}
console.log('Outside, after catch is called');
}
asyncCallWithoutTryCatchBlock();
asyncCallWithTryCatchBlock();
我希望得到此输出:
Catching error
Catching error
我明白了:
Catching error
Outside, after catch is called
Catching error
我想知道为什么在console.log
块中进行显式返回时,为什么在asyncCallWithoutTryCatchBlock
中调用外部catch
吗?
答案 0 :(得分:2)
返回值是传递给catch方法的匿名函数内部。这样,它仅从该匿名函数返回。作为函数中的最后一条语句,它实际上毫无用处。
两个代码段之间的最大区别是,一个使用语言结构try catch,另一个使用称为catch的方法,该方法需要匿名函数。