6

私はここでmongoose/q promisesフレームワークのサンプルから作業していますが、主にQフレームワークのサンプルが要点のサンプルと一致していないため、findOneを使用しようとするとnfbindにいくつかの問題があるようです。

私のコード:

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の例、およびマングースのデモを確認した後、実際には何も飛び出しません。findOneQで作品を作る方法について何かアイデアはありますか?

nfbindまた、モジュールではなくソースで関数を設定しようとしましたが、役に立ちませんでした。

4

1 に答える 1

5

nfbindingしているメソッドはuserオブジェクトのメソッドであるため、呼び出されたときにポインターが保持されるように、メソッドbindを渡す前にそのオブジェクトにメソッドを渡す必要があります。nfbindthis

このアプローチは私のために働いた:

exports.user.find = Q.nfbind(user.find.bind(user));
exports.user.findOne = Q.nfbind(user.findOne.bind(user));
于 2012-12-30T05:59:49.857 に答える