2012-04-17 22 views
2

couchdbのレスポンスハンドラが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が外部で実行されているときは値がありません。

私は単にそれを取得していないか、何か間違っていますか?

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

答えて

2

test変数はに値を持っていません。 CouchDBレスポンスがまだ届いていないため、console.logです。ログイン機能は、以下のステップを実行します。

  1. は、いくつかの変数を設定し、それが完了したとき
  2. はCouchDBのを実行するために割り当てられた機能と(this.now.lusernameのために)フェッチ開始(usernamepassword、およびtestは未定義である)はまだ定義されていません
  3. 実行console.log(test)
  4. CouchDBの応答が完了し、ステップからあなたの関数
  5. 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()機能はログインが実際にした後にのみ実行されます正しくを実行コンプリート)。

+0

説明していただきありがとうございます。 – Verbium

関連する問題