Reputation: 792
all. I'm using asyncjs's waterflow method to return res value at last.But following code is return undefined value.
var async = require("async");
User.findBy = function(name,password){
async.waterfall([
function fetch(callback){
db.lrange("users",0,-1,function(err,users){
users.forEach(function(item){
var u = JSON.parse(item);
if ((u.name == name) && (u.password == password)){
console.log(u);
callback(null,u);
return;
}
});
});
callback(null);
}
],function end(err,res){
setTimeout(function(){
// I want to return res value at last.
return u;
},0);
});
};
// but it returns undefined value.
var user = User.findBy("nobinobiru",a");
Do you have any idea? Please any help. Thanks in advance.
Upvotes: 1
Views: 2822
Reputation: 26199
In fetch function you calling callback(null); immediately after the db.lrange call. This call unnecessary here, because you need to wait results from db.
This code should work fine:
var async = require("async");
User.findBy = function(name,password){
async.waterfall([
function fetch(callback){
db.lrange("users",0,-1,function(err,users){
var user;
if (users && users.length) {
users.forEach(function(item){
var u = JSON.parse(item);
if ((u.name == name) && (u.password == password)){
console.log(u);
user = u;
return;
}
});
callback(null,user);
} else {
callback(null);
}
});
}
],function end(err,res){
setTimeout(function(){
// I want to return res value at last.
return res;
},0);
});
};
Upvotes: 1