Что такое when.js, эквивалентный Q.js done()?

Помимо then(), Q.js также имеет done(). done() обычно вызывается в конце цепочки промисов, например:

promise
.then(callback)
.then(callback)
.done(callback);

Это перехватит любые отклонения, которые не были обработаны предыдущими then()s, и обработает любые исключения, вызванные обратными вызовами then().

Есть ли что-то подобное в when.js? Как вы обрабатываете исключения, вызванные обратными вызовами? А что, если вы никогда не зарегистрируете обработчик отказа?


person Matt Zukowski    schedule 21.08.2013    source источник


Ответы (3)


Похоже, что у when теперь есть .done(), а также .catch() и .finally().

См. https://github.com/cujojs/when/blob/master/docs/api.md#extended-promise-api

person Binarytales    schedule 26.02.2014

Насколько я знаю, done в when.js нет. Действительно, если вы прочитали последний абзац, посвященный отладке есть упоминание об инструменте под названием monitor, который:

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

person danielepolencic    schedule 21.08.2013
comment
Хорошо, спасибо. Я думаю, что я мог бы также использовать .otherwise() для обнаружения случайных отклонений, но из документации не ясно, будет ли это также перехватывать любые исключения, вызванные ранее связанными обратными вызовами. - person Matt Zukowski; 22.08.2013
comment
Насколько я помню, отказы передаются по цепочке обещаний. Так что ответ — да, он будет перехватывать исключения, возникшие ранее. - person danielepolencic; 22.08.2013

В when.js нет done.

Я советую запросить его в их системе отслеживания проблем, а пока использовать другую библиотеку, которая предоставляет done.

person Mariusz Nowak    schedule 22.08.2013
comment
В тестах when.js намного быстрее, чем q.js, поэтому теряется done() может быть стоит. Не могли бы вы порекомендовать другую быструю библиотеку, которая поддерживает что-то вроде done()? - person Matt Zukowski; 22.08.2013
comment
Я поддерживаю deferred, вы можете проверить это, это быстро и имеет done почти с самого начала. I my eyes done обязательна для библиотеки промисов. - person Mariusz Nowak; 22.08.2013