Необработанный отказ от обещания на блоке try / catch - PullRequest
0 голосов
/ 25 сентября 2018

Предположим, у меня есть асинхронная функция

static async update (id, data){
  try { 
     //async function below
     _DB.putsomedata()

     return true
  } catch(e){
    //log errors
  }
}

И хотя мне не нужен результат _DB.putsomedata(), мне все равно нужно знать, завершена ли функция update() без ошибок.

Я провел некоторое тестирование и заметил, что результат всегда будет возвращать true (что и ожидалось), но в случае неудачи ошибка никогда не перехватывается в блоке catch, и это вызывает необработанное исключение.

Может кто-нибудь объяснить поведение?

Ответы [ 2 ]

0 голосов
/ 25 сентября 2018

Функция putomedata является асинхронной, поэтому возвращаемое значение в вычислениях сразу после пометки putomedata вычисляется (а не запускается, как для синхронной функции).

putomedata возвращает, вероятно, обещание, которое будет разрешено после того, когдаПроцессор будет доступен.

Вы можете использовать функции .promise () .then () .catch ()

0 голосов
/ 25 сентября 2018

Предполагая, что _DB.putsomedata - это функция async, вам необходимо await.В противном случае его Обещание будет просто продолжаться в фоновом режиме, где оно в конечном итоге завершится ошибкой и выдаст ошибкуТем временем ваш код продолжит работу, а блок try..catch будет давно завершен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...