Du anropar återuppringningsfunktionen direkt, men att gå till db tar tid och görs därför asynkront. Ring istället din återuppringning vid lämplig tidpunkt med hjälp av resultatargumentet för funktionen som skickades som den sista parametern till .findOne()
fungera. Återuppringningen bör få ett felargument och ett 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);
}
});
detta är bara att dra igenom samma mönster som mongodb-föraren använder. hoppas det hjälper.