我正在使用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) { ... }
,则用户始终是未定义的。如果删除导出并将非 promise 版本与回调一起使用,则会获得用户。我缺少一些特殊的魔术,但是在看完代码实现,Q github上的示例以及 Mongoose 演示之后……真的什么都没跳。关于如何使Q与findOne
结合使用的任何想法?我也尝试过在源代码中而不是在模块中设置
nfbind
函数,但无济于事。 最佳答案
因为您要nfbinding的方法是user
对象的方法,所以您需要先将它们bind
到该对象,然后再将它们传递给nfbind
,以便在调用时保留this
指针。
这种方法对我有用:
exports.user.find = Q.nfbind(user.find.bind(user));
exports.user.findOne = Q.nfbind(user.findOne.bind(user));
关于node.js - Mongoose 和q许诺,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14088410/