当使用瀑布方法时,async.js返回上一个值

所有。 我使用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); }); }; 

app.js

  // but it returns undefined value. var user = User.findBy("nobinobiru",a"); 

你有什么主意吗? 请任何帮助。 提前致谢。

在获取函数中调用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); }); };