我在使用异步函数时遇到了问题。我没有意识到classList.add('')是非法的。因此,当我在Firefox中运行我的代码时,它停止运行我的函数,但没有出现错误,因为它是异步的(Chrome显示错误)。这很难追查,因为在原始程序中,classList.add的函数是两个函数调用。这里有什么,以及如何在将来避免它(除了必须在两个不同的浏览器中检查错误日志)? PS奖金,如果你能解释为什么异步错误实际上不会停止执行。
async function error1(){
console.log('Fn async error: before')
let a=undefined
a.b=1
console.log('after')
}
async function error2(){
console.log('Fn async noError: before')
document.body.classList.add('')
console.log('after')
}
function error3(){
console.log('Fn: before')
document.body.classList.add('')
console.log('after')
}
//Stops execution of function but not program
//Throws an error in Chrome and Firefox
error1()
//Stops execution of function but not program
//Throws an error in Chrome but not Firefox
error2()
//Errors and stops program
error3()
答案 0 :(得分:0)
您应该等待执行,以便捕获可能的错误。这是因为从async
块内部创建的承诺表现为承诺的行为 - 如果出现任何错误,则承诺解析为rejected
并将管道异常传递给您附加的延续到拒绝路径。
两种方式:
首先 - 向您的承诺添加明确的then
:
async function error1(){
console.log('Fn async error: before')
let a=undefined
a.b=1
console.log('after')
}
error1().catch( e => {
console.log( 'error: ' + e);
} );
第二 - 围绕try
catch
- await
块
async function error1(){
console.log('Fn async error: before')
let a=undefined
a.b=1
console.log('after')
}
(async function() {
try {
await error1();
}
catch (e) {
console.log( 'error: ' + e);
}
}());