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)