在node_redis上实现findBy方法但是,它不起作用

时间:2012-08-04 03:18:53

标签: javascript node.js node-redis

所有。我在node_redis模块中实现findBy(“name”,“password”),然后执行此操作。

user.js的

 // return user find by name and password.
 User.findBy = function(name,password){
  console.log("calllelelelelll");
  var res;
  db.lrange("users",0,-1,function(err,users){

    users.forEach(function(item){
      var u = JSON.parse(item);
      if ((u.name == name) && (u.password == password)){
        res =  u;
      }
    });
    console.log(res);
    return res;
  });

};

###app.js

User.findBy(user.name,user.password);

但是,User.findBy(user.name,user.password)函数返回undefined,记录了console.log(res)

喜欢{name:“nobinobiru”,密码:“harashin0219”}

我想知道为什么findBy函数返回res未定义,但console.log(res)正常工作。请帮忙。

提前致谢。

1 个答案:

答案 0 :(得分:1)

您正在从db.lrange回调中返回res,该回调不执行任何操作。如果lrange函数不是非同步的,那么你需要将return语句向下移动到回调之后,所以它实际上是findBy()的返回值。

但是,如果db.lrange函数是异步的(我猜它可能是),那么你就无法从中获取值并进入调用函数。相反,任何想要将其返回的值用于成功处理程序回调的内容都需要在回调函数中或从回调函数调用。