.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