mongoose和q promises

时间:2012-12-30 04:53:04

标签: node.js mongoose deferred promise q

我正在使用mongoose / q promises框架示例here,但在尝试使用findOne时似乎与nfbind存在一些问题,主要是因为来自Q框架的示例“似乎与要点中的那些相匹配。

我的代码:

var mongoose = require('mongoose');
var Q = require('q');

var user_schema = mongoose.Schema({username:String, last_touched:Date, app_ids:[String]});
var user = mongoose.model('user', user_schema);

exports.user = user;
exports.user.find = Q.nfbind(user.find);
exports.user.findOne = Q.nfbind(user.findOne);

如果我致电user.findOne({username:'test'}).then(function(err, user) { ... },则始终未定义用户。如果我删除导出并使用带有回调的非承诺版本,我会得到用户。我错过了一些特殊的魔法,但是在查看了代码实现之后,从Q github和mongoose演示开始的例子......没有什么能真正跳出来。关于如何让findOne与Q合作的任何想法?

我还尝试在源代码中设置nfbind函数,而不是在模块中,但无济于事。

1 个答案:

答案 0 :(得分:5)

因为您正在解析的方法是user对象的方法,所以在将它们传递给bind之前,您需要nfbind它们,以便this调用时保留指针。

这种方法对我有用:

exports.user.find = Q.nfbind(user.find.bind(user));
exports.user.findOne = Q.nfbind(user.findOne.bind(user));