Du ringer til tilbagekaldsfunktionen med det samme, men at gå til db tager tid og foregår derfor asynkront. Ring i stedet dit tilbagekald på det passende tidspunkt ved hjælp af resultatargumentet for funktionen, der er sendt som den sidste parameter til .findOne()
fungere. Tilbagekaldet skulle få et fejlargument og et resultatargument:
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);
}
});
dette trækker bare det samme mønster igennem, som mongodb-driveren bruger. håber det hjælper.