мангуст и q обещания

Я работаю с образцом фреймворка обещаний mongoose/q здесь, но, похоже, у меня есть некоторые проблемы с nfbind при попытке использовать findOne, в основном из-за того, что образцы из структуры 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 и из демо-версии мангуста... На самом деле ничего не выскакивает. Есть идеи, как заставить findOne работать с Q?

Я также пытался установить функции nfbind в источнике, а не в модуле, но безрезультатно.


person mlaccetti    schedule 30.12.2012    source источник
comment
Проверьте также этот ответ: /   -  person Mariusz Nowak    schedule 12.02.2013


Ответы (1)


Поскольку методы, которые вы nfbinding, являются методами объекта user, вам необходимо bind привязать их к этому объекту, прежде чем передавать их nfbind, чтобы указатель this сохранялся при вызове.

Этот подход работал для меня:

exports.user.find = Q.nfbind(user.find.bind(user));
exports.user.findOne = Q.nfbind(user.findOne.bind(user));
person JohnnyHK    schedule 30.12.2012
comment
Пробовал это - даже экспортировал как searchByUsername, чтобы убедиться, что это не конфликт имен. Все еще получаю то же самое: Пользователь из MongoDB: undefined - person mlaccetti; 31.12.2012
comment
Оказывается, я злой мудак и смешивал идеи: user.findOne({'steam_username':username}).then(function (err, dbUser) { ... }) Просто удалил err (да, для этого и нужен .fail), и мы отправились на гонки. Дурр! - person mlaccetti; 31.12.2012