Spec-Zone.ru › Bluebird

.tapCatch

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

Он существует в двух вариантах. — Вариант tapCatch-all, аналогичный блоку .catch. Этот вариант совместим с родными промисами. — Фильтрованный вариант (как обычно имеют другие языки, отличные от JavaScript), который позволяет обрабатывать только определенные ошибки. Этот вариант обычно предпочтительнее.

tapCatch all

.tapCatch(function(any value) handler) -> Promise

Как .finally, который не вызывается для успешного выполнения.

getUser().tapCatch(function(err) {
    return logErrorToDatabase(err);
}).then(function(user) {
    //user is the user from getUser(), not logErrorToDatabase()
});

Типичный случай — добавление регистрации в существующую цепочку промисов:

Ограничение скорости

Promise.
  try(logIn).
  then(respondWithSuccess).
  tapCatch(countFailuresForRateLimitingPurposes).
  catch(respondWithError);

Предохранители цепи

Promise.
  try(makeRequest).
  then(respondWithSuccess).
  tapCatch(adjustCircuitBreakerState).
  catch(respondWithError);

Регистрация

Promise.
  try(doAThing).
  tapCatch(logErrorsRelatedToThatThing).
  then(respondWithSuccess).
  catch(respondWithError);

Примечание: в браузерах необходимо вызвать .tapCatch с console.log.bind(console), потому что методы консоли не могут вызываться как самостоятельные функции.

Отфильтрованный tapCatch

.tapCatch(
    class ErrorClass|function(any error),
    function(any error) handler
) -> Promise
.tapCatch(
    class ErrorClass|function(any error),
    function(any error) handler
) -> Promise

Это расширение .tapCatch для фильтрации исключений аналогично языкам, таким как Java или C#. Вместо ручного проверки instanceof или .name === "SomeError", можно указать ряд конструкторов ошибок, которые подходят для этого обработчика tapCatch. Обработчик tapCatch, который первый встретится и у которого будут указаны подходящие конструкторы, будет вызван.

Примеры использования включают:

Ограничение скорости

Promise.
  try(logIn).
  then(respondWithSuccess).
  tapCatch(InvalidCredentialsError, countFailuresForRateLimitingPurposes).
  catch(respondWithError);

Предохранители цепи

Promise.
  try(makeRequest).
  then(respondWithSuccess).
  tapCatch(RequestError, adjustCircuitBreakerState).
  catch(respondWithError);

Регистрация

Promise.
  try(doAThing).
  tapCatch(logErrorsRelatedToThatThing).
  then(respondWithSuccess).
  catch(respondWithError);

© 2013–2018 Petka Antonov
Licensed under the MIT License.
http://bluebirdjs.com/docs/api/tapcatch.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API