Я не любив жодного з цих рішень, тому я зробив своє. Try-catch-final.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/…