【问题标题】:async.js return last value when use waterfall method使用瀑布方法时,async.js 返回最后一个值
【发布时间】:2012-08-04 21:56:39
【问题描述】:

全部。最后我使用 asyncjs 的 waterflow 方法返回 res 值。但是下面的代码返回 undefined 值。

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");

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

【问题讨论】:

  • 我不知道 asyncjs,但听起来您正在尝试同步获取结果(这就是 var user =return 所暗示的)。这就是你想要做的吗?
  • User.findBy 没有返回语句,所以它的返回值为undefined。让它接受回调并调用它。
  • 你不能按照你想做的方式去做你想做的事。此外,当您只需要调用一个函数时使用“瀑布”似乎没有必要。

标签: javascript node.js async.js


【解决方案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);
    });
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-19
    • 1970-01-01
    • 2014-05-09
    相关资源
    最近更新 更多