0

すべて。これに続いて、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)関数は未定義を返し、console.log(res)がログに記録されます

{name: "nobinobiru"、password:"harashin0219"}のように

findBy関数がresを返すのはなぜ未定義なのか疑問に思いますが、console.log(res)正しく機能しています。助けてください。

前もって感謝します。

4

1 に答える 1

1

db.lrange何もしないコールバックからresを返しています。lrange関数が非同期でない場合は、returnステートメントをコールバックの後に移動して、実際にはからの戻り値になるようにする必要がありますfindBy()

ただし、db.lrange関数が非同期である場合(おそらくそうなると思います)、関数から呼び出し元の関数に値を取得することはできません。代わりに、成功ハンドラコールバックに返された値を使用する場合は、コールバック関数内にあるか、コールバック関数から呼び出される必要があります。

于 2012-08-04T03:26:00.250 に答える