visual tutorial tools studio node for cannot node.js promise bluebird

node.js - tutorial - visual node js



Error de captura personalizada no funciona en Bluebird (1)

Intento tirar y luego detectar un error personalizado en una cadena de promesa de Bluebird, pero no puedo obtener el error personalizado. Por ejemplo:

function login(req, res, next) { function LoginError() {} return User.where(''id'', req.body.userId).fetch() .then(function (location) { if (req.body.password !== location.get(''password'')) { throw new LoginError(); } // returns a promise return Subscription.where(''userId'', location.get(''userId'')).fetch(); }) .then(function (subscription) { return res.send(JSON.stringify(subscription)); }) .catch(LoginError, function (err) { return res.send(''Login error''); }) .catch(function (err) { res.send(''Other error: '' + JSON.stringify(err)); }); }

Cuando la contraseña no coincide y arroja LoginError , el error se LoginError en el segundo bloque catch, no en el bloque catch para LoginError . ¿Qué estoy haciendo mal?

Estoy usando Express.js, Bluebird y Bookshelf / Knex, donde el User es un modelo de estantería.


Bluebird distingue los constructores de error de las funciones de predicado en una catch por su herencia:

Para que un parámetro se considere como un tipo de error que desea filtrar, necesita que el constructor tenga su propiedad .prototype como instanceof Error .

Tal constructor puede crearse mínimamente así:

function MyCustomError() {} MyCustomError.prototype = Object.create(Error.prototype);

Deberá hacer lo mismo con su LoginError .

O si está utilizando ES6, la class LoginError extends Error {} .