Ada beberapa cara untuk mencapai apa yang Anda inginkan.
1. Menggunakan Kueri Mongoose
Dalam strategi ini, fungsi Anda mengembalikan kueri Mongoose yang nantinya dapat Anda gunakan untuk memanggil metode exec
dan gunakan untuk mendapatkan hasilnya.
function getJedisQuery(name){
var query = Jedi.find({name:name});
return query;
}
Kemudian Anda dapat menggunakannya hanya dengan melakukan:
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. Menggunakan Objek Seperti Janji Mongoose
Moogose memberikan dukungan untuk objek seperti janji. Yang harus Anda lakukan adalah sesuatu yang agak mirip dengan apa yang saya lakukan di atas, tetapi kali ini, Anda memanggil exec
metode tanpa panggilan balik.
function getJedisPromise(name){
var promise = Jedi.find({name:name}).exec();
return promise;
}
Kemudian Anda dapat menggunakannya hanya dengan melakukan:
var promise = getJedisPromise('Luke');
promise.then(function(jedis){
jedis.forEach(function(jedi){
console.log(jedi.name);
});
})
Seperti yang disorot di bagian komentar dari jawaban ini, objek ini sebenarnya bukan janji dan perlu diperhitungkan (lihat Kueri bukan janji).
3. Menggunakan Aliran Luwak
Akhirnya, Mongoose juga mendukung aliran dan aliran adalah penghasil acara. Jadi, Anda bisa mendapatkan streaming dan kemudian berlangganan acara 'data' dan 'kesalahan'. Seperti ini:
function getjedisStream(name){
var stream = Jedi.find({name:name}).stream();
return stream;
}
Maka Anda cukup melakukan:
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);
});
Sumber, untuk referensi di masa mendatang.