2016-11-28 2 views
2

Im, использующий библиотеку обещаний Bluebird в узле.Что такое ложноположительное отклоненное обещание? possiblyUnhandledRejection?

У меня есть раздел в моем коде, который ловит отклоненное обещание и не перебрасывает его.

«unhandledRejection» по-прежнему срабатывает с этим же обещанием впоследствии - почему это происходит, когда оно уже обработано?

Что такое «возможноUnhandledRejection»?

http://bluebirdjs.com/docs/api/error-management-configuration.html

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

Каковы «шаблоны программирования», упомянутые здесь?

Является ли это связано с этим шаблоном (один отклонен обещание прикован дважды или более, и один из них не ловит): https://github.com/petkaantonov/bluebird/issues/695#issuecomment-155373565

Благодаря

+2

Если вам нужна помощь с вашим кодом, покажите нам, что раздел. – Bergi

+0

Я не удивлен, что у вас возникла проблема с этим разделом документации Bluebird. Это далеко не ясно. –

ответ

3

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

var a = Promise.delay(Math.random()*1000) 
     .then(function(){ throw new Error(); }); 
var b = Promise.delay(Math.random()*1000) 
     .then(function() { return a; }) 
     .catch(function() { console.log("It's ok."); }); 

В половине случаев, a «задержка s короче b» s, и мы получим unhandledRejection предупреждение.

Связано ли это с образцом, в котором одно отвергнутое обещание соединено два или более раза, и один из них не поймает?

Нет, это просто ошибка. У всех ветвей должен быть обработчик ошибок.

+1

спасибо, так что же такое «ложный позитив» в вашем примере? и знаете ли вы, есть ли планы внедрить методы 'delay' и' allSettled' в собственных обещаниях? –

+0

, и я понимаю, что когда функция callback() {return a; } 'выполняется,' a' находится в состоянии 'reject '? так что это то, что происходит 'function() {return Promise.reject (valueAIsRejectedWith); } ' –

+0

любые комментарии к моим вопросам выше или я должен создать новый вопрос? –

Смежные вопросы