2012-12-30 26 views
6

Pracuję od mangusta/q obietnica ramowy próbka here, ale wydaje się mieć pewne problemy z nfbind przy próbie użycia findOne, głównie dlatego, że próbki z ramy Q nie wydają się pasować te w sednie.mangusta i q obietnice

Mój kod:

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); 

Jeśli zadzwonię user.findOne({username:'test'}).then(function(err, user) { ... }, użytkownik zawsze jest niezdefiniowany. Jeśli usunę eksport i użyję nie obiecywanej wersji z wywołaniami zwrotnymi, otrzymam użytkownika. Brakuje mi jakiejś specjalnej magii, ale po zapoznaniu się z implementacją kodu, przykładem z github Q i demo mangusty ... Nic tak naprawdę nie wyskakuje. Jakieś pomysły dotyczące tego, jak mogę uzyskać findOne współpracować z Q?

Próbowałem również ustawić funkcje nfbind w źródle, a nie w module, ale bezskutecznie.

+0

Sprawdź również tę odpowiedź http://stackoverflow.com/questions/11912573/node-js-deferred-promisify-mongoose/11931908 –

Odpowiedz

5

ponieważ metody jesteś nfbinding są metody obiektu user, trzeba bind je do tego obiektu przed przekazaniem ich do nfbind tak że wskaźnik this jest zachowany, gdy nazywa.

Takie podejście pracował dla mnie:

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

próbowałem tego, aby - nawet eksportowane jako 'searchByUsername', aby upewnić się, że nie jest to konflikt w nazwach. Wciąż dostaję to samo: Użytkownik z MongoDB: undefined – mlaccetti

+1

Okazało się, że jestem nikczemnym asshat i mieszałem pomysły: 'user.findOne ({'steam_username': username}). Then (function (err, dbUser) { ...}) ' Po prostu usunąłem' err' (duh, do czego służy .fail), a my byliśmy na wyścigach. Durr! – mlaccetti

+0

https://github.com/iolo/mongoose-q –