Каков наилучший способ поймать ошибку обещания и почему?

У меня есть два примера кода для обнаружения ошибки обещания. Как лучше и почему так?

У меня есть этот код с .catch()

Message.receive($scope.reference).then(function (response) {
  // on success
}).catch(function (error) {
  // on error
});

Также у меня есть этот код без .catch()

Message.receive($scope.reference).then(function (response) {
   // on success
}, function (error) {
   // on error
});

Кто продолжает голосовать, чтобы закрыть это как «основанное на мнении»? Между двумя фрагментами кода существует семантическая разница, как объясняется в ответе deceze ниже.

melpomene 20.06.2019 11:46
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
2
74
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

foo.then(success, error) выполняет тот или иной обратный вызов в зависимости от того, вызвала ли foo ошибку или нет. Если success вызывает ошибку, вы получите неперехваченную ошибку, если только не соедините другую .catch.

foo.then(success).catch(error) перехватывает любую ошибку, вызванную fooили success. Если foo вызывает ошибку, success пропускается.

Это не то, что лучше, это зависит от того, какую цепочку обработки ошибок вы хотите установить.

try/catch действительно дорог, и всегда хорошо передавать ошибки в обратных вызовах (предпочтительно первые аргументы). Поправьте меня, если я ошибаюсь

Shubh 20.06.2019 11:37

@Shubh Какое отношение это имеет к вопросу или ответу?

melpomene 20.06.2019 11:37

Лучший способ отловить ошибки?? @melpomene, это обратный вызов или ловушка?

Shubh 20.06.2019 11:38

@Shubh 1) Это не обязательно должно быть выброшенное исключение, это может быть просто отклоненное обещание. 2) Использование обратных вызовов в стиле (err, data) — это то, что использовалось до того, как промисы действительно появились. Если вы используете этот стиль с промисами, вы скорее упускаете суть.

deceze 20.06.2019 11:39

@Shubh Если у вас есть другой вопрос, задайте его как новый вопрос. Это не имеет ничего общего с кодом OP.

melpomene 20.06.2019 11:40

У меня были сомнения, которые развеял deceze @melpomene

Shubh 20.06.2019 11:41

Итак, подводя итог, foo.then(success).catch(error) может поймать больше ошибок, чем foo.then(success, error). Это утверждение верно? Потому что я хочу поймать любое исключение и отобразить сообщение об ошибке.

Veselin Kontić 20.06.2019 13:11

@Veselin Да, это правильно. Но это не является автоматически «лучше», так как на самом деле вам может понадобиться foo.then(success, error).catch(ultimateError), в зависимости от того, как вы хотите обрабатывать ошибку который.

deceze 20.06.2019 13:23

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