Spec-Zone.ru › Bluebird

.error

.error([function(any error) rejectedHandler]) -> Promise

Как и .catch, но вместо перехвата всех типов исключений, она перехватывает только операционные ошибки.

Обратите внимание, что «ошибки» означают ошибки, то есть объекты, которые instanceof Error - не строки, числа и так далее. См. строка не является ошибкой.

Это эквивалентно следующему шаблону .catch:

// Assumes OperationalError has been made global
function isOperationalError(e) {
    if (e == null) return false;
    return (e instanceof OperationalError) || (e.isOperational === true);
}

// Now this bit:
.catch(isOperationalError, function(e) {
    // ...
})

// Is equivalent to:

.error(function(e) {
    // ...
});

Например, если функция, обернутая в promisify, возвращает node-стилевый коллбэк с ошибкой, то ее можно перехватить с помощью .error. Однако, если node-стилевой коллбэк выбрасывает ошибку, то ее перехватит только .catch.

В следующем примере вы можете обрабатывать только SyntaxError из JSON.parse и ошибки Файловой системы из fs, но позволить ошибкам программиста переходить как необработанным отклонениям:

var fs = Promise.promisifyAll(require("fs"));

fs.readFileAsync("myfile.json").then(JSON.parse).then(function (json) {
    console.log("Successful json")
}).catch(SyntaxError, function (e) {
    console.error("file contains invalid json");
}).error(function (e) {
    console.error("unable to read file, because: ", e.message);
});

Теперь, поскольку нет обработчика всех ошибок, если вы ввели console.lag (что вызывает ошибку, которой вы не ожидаете), вы увидите:

Possibly unhandled TypeError: Object #<Console> has no method 'lag'
    at application.js:8:13
From previous event:
    at Object.<anonymous> (application.js:7:4)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:349:32)
    at Function.Module._load (module.js:305:12)
    at Function.Module.runMain (module.js:490:10)
    at startup (node.js:121:16)
    at node.js:761:3

(Если у вас не получается вышеперечисленное — вам нужно включить полные трассировки стека)

А если файл содержит некорректный JSON:

file contains invalid json

И если модуль fs вызывает ошибку, например, «файл не найден»:

unable to read file, because:  ENOENT, open 'not_there.txt'

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

Spec-Zone.ru

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