Anda tidak bisa gunakan hasil asinkron sebagai nilai balik dari suatu fungsi. Sesederhana itu. Anda harus mengirimkan hasil asinkron ke pemanggil melalui panggilan balik yang disediakan sebagai parameter ke fungsi (atau menggunakan futures/promises dan secara efektif menunda langkah itu, tetapi itu lebih terlibat).
if_exists
seharusnya terlihat seperti ini:
var if_exists = function(query, where, callback) {
require('mongodb').connect(DB.mongo_url, function(err, db) {
db.collection(where, function(err, coll) {
coll.findOne(query, function(e, r) {
//console.log(r);
if (r === null) {
callback(e, false);
} else {
callback(e, true);
}
// You should either close db here or connect during start up
// and leave it open.
db.close();
});
});
});
}