2

私は、node.js と now.js で役に立つことを行うために、couchdb の応答ハンドラーを取得するのに多くの問題を抱えています。私の目的は、発見され、クライアントから送信された特定の情報を使用して、クライアントまたはグループに電話をかけることです。

everyone.now.login = function(){
var username = this.now.lusername;
var password = this.now.lpassword;
var test;
db.get(this.now.lusername, function (err, doc, test, username) {
    if (err) {
        console.log(+ username + " doesn't exist!");

    } else  {
        console.log('Found user!');
        console.log(doc);
        test = 1;
   }
    });
    console.log(test);
}

ここでは例としてテストを使用しています。db.get の外部で宣言し、内部で値を割り当ててフィードバックしますが、console.log を外部で実行すると値がありません。

私は単にそれを取得していないのですか、それとも何か問題がありますか?

(私はドキュメントを使用できるようにリリースします。(どんな値でも)しかし、この呼び出しの外でクライアントに戻したい特定の変数があります)

4

1 に答える 1

2

CouchDBの応答がまだ到着していないため、test変数には値がありません。console.logログイン関数は、次の手順を実行します。

  1. いくつかの変数を設定します ( usernamepassword、およびtestは未定義)
  2. this.now.lusername完了時に実行するように割り当てられた関数でCouchDB fetch (for ) を開始します
  3. console.log(test)まだ定義されていない実行
  4. CouchDB の応答が完了し、ステップ 2 の関数が実行されます

このようなことに対して私がしていることは、関数呼び出しを使用することです。

everyone.now.login = function(){
  var username = this.now.lusername;
  var password = this.now.lpassword;

  db.get(this.now.lusername, function (err, doc, test, username) {
    if (err) {
        console.log(+ username + " doesn't exist!");

    } else  {
        console.log('Found user!');
        console.log(doc);
        login_complete(doc);
   }
  });

  function login_complete(doc) {
    console.log('The login finished! Doc is ' + doc)
  }
}

この方法でもコードは正しく見えますが(コードの「ストーリー」はほとんど上から下に流れます)、正しく実行login_complete()されます (関数はログインが実際に完了した後にのみ実行されます)。

于 2012-04-17T20:00:48.633 に答える