Есть ли библиотека обещаний javascript, которая обрабатывает ошибки времени выполнения?

До сих пор я пытался сравнить Parse.Promise, Q и Bluebird, но мне не удалось получить блок error или catch для обработки/фиксации асинхронной ошибки времени выполнения.

Если вы считаете, что одна из библиотек, упомянутых выше, может обрабатывать/фиксировать асинхронные ошибки времени выполнения и подозреваете, что я неправильно написал пример кода, не стесняйтесь указать на любые ошибки: https://github.com/pulkitsinghal/example-promises

В противном случае я ищу предложения для изучения других библиотек обещаний или фреймворков.


person pulkitsinghal    schedule 05.01.2015    source источник
comment
Пожалуйста, опубликуйте код здесь и какие ошибки вы ожидаете обнаружить.   -  person Bergi    schedule 05.01.2015
comment
дубликат Использование Q.promises: как поймать асинхронный бросок?   -  person Bergi    schedule 05.01.2015
comment
дубликат асинхронной обработки исключений с обещаниями bluebird   -  person Bergi    schedule 05.01.2015
comment
Эти двое очень близки, но не являются точными копиями.   -  person Benjamin Gruenbaum    schedule 05.01.2015


Ответы (1)


Для библиотеки просто невозможно обрабатывать ошибки вне ее контроля. Единственная причина, по которой библиотеки промисов безопасны для бросков, заключается в том, что промисы используют возвращаемые значения для ассимиляции других промисов.

Если весь ваш код возвращает обещания вместо обратных вызовов, все библиотеки обещаний A+ (в вашем примере это Q и Bluebird, но не Parse.promise) будут обнаруживать ошибки времени выполнения, и bluebird даже автоматически сообщит о них без необходимости их .catch.

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

So:

  • Промисы защищены от ошибок выполнения, если вы используете промисы для всего приложения.
  • Если вам нужно запустить ненадежный код, который может вызвать ошибку, подумайте о том, чтобы запустить его на виртуальной машине с помощью модуля vm.
  • Иногда возникают ошибки узла, которые не оставляют вам другого выбора, кроме как перезапустить сервер.
  • Обещайте на самом низком возможном уровне, чтобы избежать создания обещанных функций.

Вот более широкий вопрос, в котором обсуждается асинхронная обработка ошибок в NodeJS.

person Benjamin Gruenbaum    schedule 05.01.2015