Anda memanggil fungsi panggilan balik segera, tetapi pergi ke db membutuhkan waktu dan karena itu dilakukan secara asinkron. Sebagai gantinya, panggil callback Anda pada waktu yang tepat menggunakan argumen hasil dari fungsi yang diteruskan sebagai parameter terakhir ke .findOne()
fungsi. Callback harus mendapatkan argumen kesalahan dan argumen hasil:
login: function(user, pass, callback) {
db.open(function (err, db) {
if(!err) {
db.collection("users", function(err, collection) {
collection.findOne(
{
"username": user,
"password": pass
},
function(err, item) {
if(!err) {
callback(null,item);
} else {
callback("error");
}
}
);
});
} else {
callback("error",null);
}
});
}
user.login("test", "test", function(err,msg) {
if( err ) {
//error occured above;
} else {
//success
console.log(msg);
}
});
ini hanya menarik pola yang sama dengan yang digunakan driver mongodb. semoga membantu.