あなたが望むものを達成するためのいくつかの方法があります。
1。マングースクエリの使用
この戦略では、関数は、後でメソッドexec
を呼び出すために使用できるMongooseクエリを返します。 結果を得るためにそれを使用します。
function getJedisQuery(name){
var query = Jedi.find({name:name});
return query;
}
次に、次のようにするだけで使用できます。
var query = getJedisQuery('Obi-wan');
query.exec(function(err,jedis){
if(err)
return console.log(err);
jedis.forEach(function(jedi){
console.log(jedi.name);
});
});
2。マングースプロミスのようなオブジェクトの使用
Moogoseは、promiseのようなオブジェクトのサポートを提供します。あなたがしなければならないのは私が上でしたことと幾分似ていることですが、今回はexec
を呼び出します コールバックのないメソッド。
function getJedisPromise(name){
var promise = Jedi.find({name:name}).exec();
return promise;
}
次に、次の操作を行うだけで使用できます。
var promise = getJedisPromise('Luke');
promise.then(function(jedis){
jedis.forEach(function(jedi){
console.log(jedi.name);
});
})
この回答のコメントセクションで強調されているように、これらのオブジェクトは実際には約束ではなく、考慮する必要があります(クエリは約束ではありませんを参照)。
3。マングースストリームの使用
最後に、Mongooseはストリームもサポートしており、ストリームはイベントエミッターです。したがって、ストリームを取得してから、「データ」イベントと「エラー」イベントをサブスクライブできます。このように:
function getjedisStream(name){
var stream = Jedi.find({name:name}).stream();
return stream;
}
次に、次のことを簡単に行うことができます:
var stream = getJedisStream('Anakin');
stream.on('data', function(jedis){
jedis.forEach(function(jedi){
console.log(jedi.name);
});
});
stream.on('error', function(error){
console.log(error);
});
ソース、将来の参照用。