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

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

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

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

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

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

2
Nelson Owalo 25 Сен 2018 в 11:32

2 ответа

Лучший ответ

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

3
deceze 25 Сен 2018 в 08:34

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

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

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

0
Eric 25 Сен 2018 в 08:38