Некоторые ошибки внутри асинхронных функций не работают должным образом - PullRequest
0 голосов
/ 27 апреля 2018

Я столкнулся с проблемой при использовании асинхронных функций. Я не понял, что 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 голосов
/ 27 апреля 2018

Вам следует дождаться выполнения, которое позволит отследить возможные ошибки. Это связано с тем, что обещание, которое создается внутри вашего блока 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);
   }
}());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...