所有。我正在使用asyncjs的waterflow方法最后返回res值。但是下面的代码是返回未定义的值。
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");
你知道吗?请帮忙。
提前谢谢。
答案 0 :(得分:1)
在fetch函数中调用callback(null);在db.lrange调用之后立即执行。此处不需要此调用,因为您需要等待db的结果。
此代码应该可以正常工作:
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);
});
};