node.js - कस्टम त्रुटि को पकड़ने में Bluebird में काम नहीं कर रहा है



promise (1)

ब्लूबर्ड अपने कंसल्टेंट के जरिए त्रुटि कंसल्टेंट्स को पर्सेट फंक्शन से अलग करता है:

एक पैरामीटर के लिए एक प्रकार की त्रुटि माना जाता है जिसे आप फ़िल्टर करना चाहते हैं, आपको इसके लिए कन्स्ट्रक्टर की आवश्यकता है। .prototype संपत्ति का instanceof Error

ऐसे निर्माता को कम से कम बनाया जा सकता है:

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

आपको अपने LoginError लिए ऐसा करना होगा।

या यदि आप class LoginError extends Error {} का उपयोग कर रहे हैं, तो class LoginError extends Error {}

मैं नीलाबर्ड वायर्ड श्रृंखला में फेंकने और फिर कस्टम त्रुटि को पकड़ने की कोशिश कर रहा हूं, लेकिन मैं कस्टम त्रुटि को पकड़ने के लिए नहीं मिल सकता। उदाहरण के लिए:

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));
    });
}

जब पासवर्ड से मिलान नहीं होता है और यह LoginError फेंकता है, तो त्रुटि को दूसरी कैच ब्लॉक में पकड़ा गया है, LoginError लिए कैच ब्लॉक नहीं। मैं क्या गलत कर रहा हूं?

मैं Express.js, Bluebird, और Bookshelf / Knex का उपयोग कर रहा हूं जहां User एक बुकशेल्फ मॉडल है I





bluebird