【发布时间】:2014-07-11 20:22:37
【问题描述】:
我已经开始使用 Promise,我使用 Node.js Mango(与 mongoose)和 bluebird.. 我遇到的问题是由于某种原因,当我将猫鼬调用与返回承诺的函数链接起来时(我假设这是返回和链接的正确方法)然后我得到:
typeError: Object #<Promise> has no method 'fail'
如果我更改失败捕获,那么我会遇到同样的问题:
typeError: Object #<Promise> has no method 'catch'
我所做的是使用完全失败并捕获的函数(null,函数)模式。 但是 catch / fail 更具可读性。任何线索为什么我会得到这个以及我应该如何解决这个问题?
这是代码块的示例。
User.findOne({ 'email' : user_email }).exec()
}).then (promisedTransformUserSchemaToFrontendObjectWithProjectMapping)
.then (function (feUser) {
return new Promise(function (resolve, reject) {
res.json(feUser);
return resolve(feUser);
});
}).fail/catch (function (err) {
console.log(err);
sendError(res,"failed to get user",err);
});
这里是堆栈跟踪:
TypeError: Object #<Promise> has no method 'catch'
at module.exports.app.put.User.update.email (app\controllers\router.js:165:16)
at callbacks (node_modules\express\lib\router\index.js:164:37)
at isLoggedIn (app\controllers\router.js:741:10)
at callbacks (node_modules\express\lib\router\index.js:164:37)
at param (node_modules\express\lib\router\index.js:138:11)
at param (node_modules\express\lib\router\index.js:135:11)
at pass (node_modules\express\lib\router\index.js:145:5)
at Router._dispatch (node_modules\express\lib\router\index.js:173:5)
at Object.router (node_modules\express\lib\router\index.js:33:10)
at next (node_modules\express\node_modules\connect\lib\proto.js:193:15)
【问题讨论】:
-
你能分享堆栈跟踪吗?
-
不要使用mongoose返回的promises,只使用promisifyAll并独占使用
*Async方法 -
new Promise位也受到延迟反模式的影响 -
@Esailija 是的,可能只是
.tap(res.json) -
@Esailija 为什么不使用异步方法,为什么新的 Promise 是反模式?
标签: javascript node.js mongodb mongoose promise