Не удается обработать отклонение обещания

#javascript #node.js

#javascript #node.js

Вопрос:

 function sendPushNotification(subscription, urlEncodedData){
  try {
    webpush.sendNotification(subscription, urlEncodedData);
  } catch (err){
    console.log('err');
    console.log(err);
  }
}
  

Это не улавливает ошибку, она по-прежнему считается «необработанным отклонением». Почему?

Комментарии:

1. Разве вам не пришлось бы await это делать или что-то в этом роде? Любые другие подробности о webpush?

Ответ №1:

Если вы вызываете async функцию или функцию, которая возвращает a Promise , тогда вам нужно правильно упорядочить вещи:

 async function sendPushNotification(subscription, urlEncodedData){
  try {
    await webpush.sendNotification(subscription, urlEncodedData);
  } catch (err){
    console.log('err');
    console.log(err);
  }
}
  

Здесь await будет зафиксирован любой ответ. Условие ошибки, которое будет проявляться как исключение.

Обратите внимание, что это приводит sendPushNotification() к возврату a Promise , поэтому вам придется рассматривать его как асинхронный. Это означает, что вызывающий абонент тоже должен await это сделать, и это может повлиять на цепочку вызовов в зависимости от ваших требований к последовательности.

Комментарии:

1. Брутальный, спасибо за помощь, я бы никогда этого не понял.

2. Если вы привыкли блокировать код (синхронно), как и в большинстве других языков, то вам может быть сложно разобраться с асинхронным стилем кодирования JavaScript, так что не корите себя за это. Вы были действительно близки.

3. Я обычно работаю с async / await в JS, но я этого раньше не видел.