Mongoose save()使用本机承诺 - 如何捕获错误

ste*_*red 9 mongoose promise

我试图捕捉使用Mongoose本地承诺从Mongoose抛出的错误.但我不知道从哪里获取Mongoose的错误对象.

如果可能的话,我希望将错误抛入.then()s并陷入其中.catch().

var contact = new aircraftContactModel(postVars.contact);
contact.save().then(function(){
    var aircraft = new aircraftModel(postVars.aircraft);
    return aircraft.save();
})
.then(function(){
    console.log('aircraft saved')
}).catch(function(){
    // want to handle errors here
});
Run Code Online (Sandbox Code Playgroud)

尝试不使用其他库,因为.save()本身返回一个promise.

Jas*_*ust 26

MongooseJS使用没有方法的mpromise库catch().要捕获错误,您可以使用第二个参数then().

var contact = new aircraftContactModel(postVars.contact);
contact.save().then(function() {
    var aircraft = new aircraftModel(postVars.aircraft);
    return aircraft.save();
  })
  .then(function() {
    console.log('aircraft saved')
  }, function(err) {
    // want to handle errors here
  });
Run Code Online (Sandbox Code Playgroud)

更新1:从4.1.0开始,MongooseJS现在允许使用哪个promise实现规范:

Yup require('mongoose').Promise = global.Promise将使猫鼬使用原生承诺.您应该能够使用任何ES6承诺构造函数,但是现在我们只使用native,bluebird和Q进行测试

更新2:如果您在最新版本的4.x中使用mpromise,您将收到此禁止警告:

DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated
Run Code Online (Sandbox Code Playgroud)


小智 4

你可以在猫鼬上扩展承诺功能bluebird

Promise = require('bluebird');
mongoose.Promise = Promise;
Run Code Online (Sandbox Code Playgroud)