Записывать все отклоненные обещания в Q

Есть ли способ настроить Q для регистрации или вызова определенной функции для всех отклоненных обещаний (например, перехватчика)?

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

Спасибо!


person Ricardo Mayerhofer    schedule 14.06.2015    source источник
comment
Начиная с версии 1.3 в Q доступно отслеживание необработанных отказов   -  person Bergi    schedule 14.06.2015
comment
@Bergi Я думаю, OP хочет tap все отказы, я думаю. Это недоступно, правда?   -  person thefourtheye    schedule 14.06.2015
comment
@thefourtheye: Я понял, что он хочет перехватить только проглоченных.   -  person Bergi    schedule 14.06.2015


Ответы (1)


Q на самом деле уже поддерживает это - начиная с 1.3.0 Q предлагает стандартные необработанные хуки отклонения:

process.on("unhandledRejection", function(reason, p) {
  console.log("Unhandled rejection detected ", reason, p);
});

Вы также можете регистрировать обнаруженные ошибки из .done с помощью Q.onerror:

Q.onerror = function(error){
    // errors will be here and not thrown in `done` chains.
};
person Benjamin Gruenbaum    schedule 14.06.2015
comment
Q.onerror также предназначен только для неперехваченных ошибок, верно? - person thefourtheye; 15.06.2015
comment
@thefourtheye - да, но для обработанных неперехваченных - то есть тех, которые вы неявно поймали, написав .done(). - person Benjamin Gruenbaum; 15.06.2015
comment
Замечательно то, что я искал. Есть ли способ распечатать трассировку стека ошибок, если она доступна? - person Ricardo Mayerhofer; 16.06.2015
comment
@RicardoMayerhofer да, параметр reason - это ошибка, которую вы отклонили, и вы можете распечатать ее трассировку стека - обязательно включите длинные трассировки стека (Q.longStackTraces = true) в верхней части вашего кода. - person Benjamin Gruenbaum; 16.06.2015