mongoose和Q承诺

我正在从这里的mongoose / q promises框架样例开始工作 ,但在尝试使用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) { ... } ,用户总是未定义。如果我删除导出并使用callback的非诺言版本,我得到了用户,我错过了一些特殊的魔法,但是在看了代码实现之后,来自Q github和mongoose演示的例子…没有什么真正跳出来的。用Q做一个findOne工作?

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

因为你正在绑定的方法是user对象的方法,所以你需要把它们bind到那个对象,然后再把它们传递给nfbind这样this指针在被调用的时候被保留下来。

这种方法对我有用:

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