Es gibt mehrere Möglichkeiten, das zu erreichen, was Sie wollen.
1. Mongoose-Abfragen verwenden
Bei dieser Strategie gibt Ihre Funktion eine Mongoose-Abfrage zurück, mit der Sie später die Methode exec
aufrufen können und verwenden Sie es, um die Ergebnisse zu erhalten.
function getJedisQuery(name){
var query = Jedi.find({name:name});
return query;
}
Dann können Sie es einfach verwenden:
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. Verwenden von Mongoose Promise-ähnlichen Objekten
Moose bietet Unterstützung für Promise-ähnliche Objekte. Alles, was Sie tun müssen, ist etwas Ähnliches wie oben, aber dieses Mal rufen Sie die exec
auf Methode ohne Callback.
function getJedisPromise(name){
var promise = Jedi.find({name:name}).exec();
return promise;
}
Dann können Sie es verwenden, indem Sie einfach Folgendes tun:
var promise = getJedisPromise('Luke');
promise.then(function(jedis){
jedis.forEach(function(jedi){
console.log(jedi.name);
});
})
Wie im Kommentarbereich dieser Antwort hervorgehoben, handelt es sich bei diesen Objekten nicht um Versprechen, und das muss berücksichtigt werden (siehe Abfragen sind keine Versprechungen).
3. Verwenden von Mongoose-Streams
Schließlich unterstützt Mongoose auch Streams und Streams sind Event-Emitter. Sie könnten also einen Stream erhalten und dann 'Daten'- und 'Fehler'-Ereignisse abonnieren. So:
function getjedisStream(name){
var stream = Jedi.find({name:name}).stream();
return stream;
}
Dann können Sie einfach Folgendes tun:
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);
});
Quelle, für zukünftige Referenz.