我正在使用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/

10-09 22:24