Как мне обрабатывать исключения глобально с собственными обещаниями в node.js?
Я знаю, как обрабатывать определенные ошибки в обещаниях, но у меня иногда есть фрагменты кода, которые выглядят так:
somePromise.then(function(response){
otherAPI(JSON.parse(response));
});
Иногда я получаю недопустимый JSON, который вызывает тихий сбой здесь, когда JSON.parse
throw
s. В общем, я должен помнить, чтобы добавить .catch
обработчик каждого обещания в моем коде, и когда я не делаю, у меня нет никакого способа узнать, где я забыл одно.
Как мне найти эти подавленные ошибки в моем коде?
1 ответ
В современном NodeJS
Начиная с io.js 1.4 и Node 4.0.0 вы можете использовать process
"unhandledRejection"
событие:
process.on("unhandledRejection", function(reason, p){
console.log("Unhandled", reason, p); // log all your errors, "unsuppressing" them.
throw reason; // optional, in case you want to treat these as errors
});
Это положит конец необработанным проблемам отклонения и трудностям отслеживания их в вашем коде.
В старом NodeJS
Эти события еще не были перенесены в более старые версии NodeJS и вряд ли будут. Вы можете использовать библиотеку обещаний, которая расширяет собственный API обещаний, такой как bluebird, который будет запускать те же события, что и в современных версиях.
Стоит также упомянуть, что есть несколько пользовательских библиотек обещаний, которые предлагают необработанные средства обнаружения отклонений и многое другое, такое как bluebird (у которого также есть предупреждения) и когда.