आप कॉलबैक फ़ंक्शन को तुरंत कॉल कर रहे हैं, लेकिन डीबी में जाने में समय लगता है और इसलिए इसे अतुल्यकालिक रूप से किया जाता है। इसके बजाय, .findOne()
के अंतिम पैरामीटर के रूप में पारित फ़ंक्शन के परिणाम तर्क का उपयोग करके उचित समय पर अपने कॉलबैक को कॉल करें। समारोह। कॉलबैक को त्रुटि तर्क और परिणाम तर्क मिलना चाहिए:
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);
}
});
यह सिर्फ उसी पैटर्न को खींच रहा है जिसके माध्यम से मोंगोडब-ड्राइवर उपयोग कर रहा है। उम्मीद है कि यह मदद करता है।