Как правильно обрабатывать только ошибку обещания?

См. Пример ниже, где метод вернет обещание и соответственно разрешит / отклонит это обещание. На данный момент меня не интересует обработка разрешения, я просто хочу обработать отклонение.

Есть ли лучший кроссбраузерный способ сделать это, не объявляя эту бесполезную функцию успеха?

  MyClass.method().then((sData) => {
    // Nothing to do here
  }, (eData) => {
    // Important code to run here
  })

В моем коде я использую обещания AngularJS. Однако вопрос актуален для других распространенных библиотек и собственного объекта Promise.

я думаю это нормально. я видел такое поведение раньше.

DrNio 11.04.2018 12:32

Вы имеете в виду как .catch()?

Chris G 11.04.2018 12:32

Я думал, он говорил о resolve и reject, но да, это не очень понятно

DrNio 11.04.2018 12:33

@DrNio да, я не уверен, что там непонятно, я немного изменил вопрос, посмотрим, имеет ли он больше смысла сейчас.

caiocpricci2 11.04.2018 12:39

@ChrisG Да. Это именно то, что я искал.

caiocpricci2 11.04.2018 12:41
Is there a better, cross browser way of doing it Если вы не против переноса файлов для старых браузеров, есть async / await.
Keith 11.04.2018 12:42
0
7
80
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Да! Для этого вы можете использовать функцию catch:

MyClass.method()
  .catch(error => { ... })

Предполагая, что MyClass.method() возвращает действительный объект API обещания, catch должен уметь улавливать любое отклонение.

Сравнивая .catch с моим кодом в вопросе, кажется, что catch также фиксирует необработанные исключения, а функция отклонения - нет?

caiocpricci2 11.04.2018 12:42

@ caiocpricci2 - значит, ты этого не хочешь?

31piy 11.04.2018 12:48

@ caiocpricci2, вот как работают промисы. Обещание отклоняется, когда вызывается reject или возникает ошибка. источник

Kevin Drost 11.04.2018 12:48

Вы можете использовать метод .catch от Promise.

MyClass.method().catch(error => {
  // handle the error here
});

YourClass.method() .catch(error => { ... })

См. Для справки: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise

Promise

Ответ принят как подходящий

Как указано в других ответах, для этого используйте функцию .catch.

MyClass.method()
  .catch(error => { error handling logic (async)})

Я хотел бы добавить следующее:

Обычно в функции .then() вы предоставляете 2 таких обратных вызова (эти обратные вызовы всегда будут выполняться асинхронно):

const promise2 = doSomething().then(successCallback, failureCallback);

Однако .catch() - это сокращение от then(), где successCallback заполняется null.

then(null, failureCallback)

Другие вопросы по теме