.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