Как мне обрабатывать исключения глобально с собственными обещаниями в node.js?

Я знаю, как обрабатывать определенные ошибки в обещаниях, но у меня иногда есть фрагменты кода, которые выглядят так:

somePromise.then(function(response){
    otherAPI(JSON.parse(response));
});

Иногда я получаю недопустимый JSON, который вызывает тихий сбой здесь, когда JSON.parsethrows. В общем, я должен помнить, чтобы добавить .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 (у которого также есть предупреждения) и когда.

Другие вопросы по тегам