异步函数内部的一些错误无法正常工作

时间:2018-04-27 12:53:09

标签: javascript async-await

我在使用异步函数时遇到了问题。我没有意识到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()

1 个答案:

答案 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);
   }
}());