Мне не нравилось ни одно из этих решений, поэтому я сделал свое. Try-catch-finally.js довольно крутой, за исключением того, что если вы забудете один маленький символ подчеркивания (_) перед попыткой, тогда код все равно будет работать нормально, но ничего не поймают! Тьфу.
CatchFilter
Я добавил в свой код CatchFilter:
"use strict";
/**
* This catches a specific error. If the error doesn't match the errorType class passed in, it is rethrown for a
* different catch handler to handle.
* @param errorType The class that should be caught
* @param funcToCall The function to call if an error is thrown of this type
* @return {Function} A function that can be given directly to the `.catch()` part of a promise.
*/
module.exports.catchOnly = function(errorType, funcToCall) {
return (error) => {
if(error instanceof errorType) {
return funcToCall(error);
} else {
// Oops, it's not for us.
throw error;
}
};
};
Теперь я могу фильтровать
Теперь я могу фильтровать как в C # или Java:
new Promise((resolve, reject => {
<snip><snip>
}).catch(CatchFilter.catchOnly(MyError, err =>
console.log("This is for my error");
}).catch(err => {
console.log("This is for all of the other errors.");
});
Error
есть проблемы. См. Stackoverflow.com/questions/1382107/…