Node.js 对象#<;承诺>;没有方法';捕捉';

Node.js 对象#<;承诺>;没有方法';捕捉';,node.js,mongoose,promise,bluebird,Node.js,Mongoose,Promise,Bluebird,我的用户库有以下注册代码 function register { // do some validation on lib level //user is instance of user collection user.save() .then(function(error,records, numberOfRecords) { // got any kind of error if (error) { next('fail',

我的用户库有以下注册代码

function register {
// do some validation on lib level

//user is instance of user collection
user.save()
    .then(function(error,records, numberOfRecords) {
        // got any kind of error
        if (error) {
            next('fail',msg,{error_code : 510, exception : ex} )
            return ;        
       }
        next('success','good', records );
    })
    .catch(function(ex) {
        var msg =  ex.message;
        error = ex
        system.log.error(msg);
        next('fail',msg,{error_code : 510, exception : ex} );
    }).done();
}
在我的mongooes模式中,我实现了中间件

    User.pre('save', function (next) {

          // just checking error is available in catch schope or not
          var err = new Error('I am doing some experiment on it');
          next(err);
    });

var Promise = require('bluebird');

var User = mongoose.model('User');
Promise.promisifyAll(User);
Promise.promisifyAll(User.prototype);
获得以下问题

TypeError: Object #<Promise> has no method 'catch'
    at User.register (/server/core/modules/user.js:69:10)
    at router.post.http.request (/server/routes/user.js:55:8)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:82:5)
    at next (/node_modules/express/lib/router/route.js:110:13)
    at Route.dispatch (/node_modules/express/lib/router/route.js:91:3)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:82:5)
    at /node_modules/express/lib/router/index.js:267:22
    at Function.proto.process_params (/node_modules/express/lib/router/index.js:321:12)
    at next (/node_modules/express/lib/router/index.js:261:10)
    at Function.proto.handle (/node_modules/express/lib/router/index.js:166:3)
    at router (/node_modules/express/lib/router/index.js:35:12)
    at Layer.handle [as handle_request] (/node_modules/express/lib/router/layer.js:82:5)
    at trim_prefix (/node_modules/express/lib/router/index.js:302:13)
    at /node_modules/express/lib/router/index.js:270:7
    at Function.proto.process_params (/node_modules/express/lib/router/index.js:321:12)
    at next (/node_modules/express/lib/router/index.js:261:10)
    at /server/router.js:45:3
TypeError:对象#没有方法“catch”
在User.register(/server/core/modules/User.js:69:10)
在router.post.http.request(/server/routes/user.js:55:8)
在Layer.handle[作为handle\u请求](/node\u modules/express/lib/router/Layer.js:82:5)
下一步(/node\u modules/express/lib/router/route.js:110:13)
在Route.dispatch(/node_modules/express/lib/router/Route.js:91:3)
在Layer.handle[作为handle\u请求](/node\u modules/express/lib/router/Layer.js:82:5)
at/node_modules/express/lib/router/index.js:267:22
位于Function.proto.process_参数(/node_modules/express/lib/router/index.js:321:12)
下一步(/node\u modules/express/lib/router/index.js:261:10)
位于Function.proto.handle(/node_modules/express/lib/router/index.js:166:3)
在路由器上(/node_modules/express/lib/router/index.js:35:12)
在Layer.handle[作为handle\u请求](/node\u modules/express/lib/router/Layer.js:82:5)
在trim_前缀(/node_modules/express/lib/router/index.js:302:13)
at/node_modules/express/lib/router/index.js:270:7
位于Function.proto.process_参数(/node_modules/express/lib/router/index.js:321:12)
下一步(/node\u modules/express/lib/router/index.js:261:10)
at/server/router.js:45:3
我的问题是::
如何解决这个问题??

如何捕获mongooes中间件到我的lib函数(catch)的错误

看来你用的不是蓝鸟,而是猫鼬的承诺(),这就是

你可以通过

  • 使用
    user.saveAsync()。然后(…)
    ,正如您所介绍的
    user
    模型
  • 使用
    Promise.resolve(user.save())。然后(…)
    将猫鼬的承诺转换为蓝鸟的承诺
如果要使用,
接受两个参数:successHandler和errorHandler:
user.save()。然后(successHandler,errorHandler)
,或者可以使用第二个
然后
作为
捕获
用户.save()。然后(successHandler)。然后(null,errorHandler)