2010-11-25 11 views
0

適切な設定変数がなくてもスクリプトはどのように継続できますか?返信ありがとう!コールバックのない変数の設定

コード

function get(param) { 

    // Connect to database and get the response ~ 1 sec 
    db.get(param, function(output) { 

    console.log("Hey, I set the variable!"); 

    return output; 

    }); 

} 

try { 

    var username = get("username"); 
    var birthday = get("birthday"); 

} catch (e) { 

    error = e; 

} 

if (!error) { 

    console.log("No errors? Everything all right?"); 

} 

出力

No errors? Everything all right? 
Hey, I set the variable! 
+0

私には、あなたが私たちに示していないコードがたくさんあると思います。 – Pointy

+0

最初のコードブロックはどこにありますか? 「数秒後」とはどういう意味ですか...そのコードはどうやって実行されますか? 「データベースに接続する」というコメントはどういう意味ですか?このコードの実行コンテキストは何ですか?ブラウザやNode.jsなどのサーバー側のシステムですか? "get()"関数のコードは本当に**どのように見えますか? – Pointy

+0

問題は私と(他の人たちも)問題が何であるかを疑うことですが、実際のコードを "get()"することなく、何が起きているのかを正確に伝えるのは非常に難しいでしょう。 – Pointy

答えて

1

あなたは同時に考えています。 2つのgetステートメントが呼び出されますが、dbはどちらのコールバックも呼び出されていません。あなたのプログラムは、catchブロックが決して入力されなかったので、未定義であるerrorをチェックすることにそってうまくいく。結果として、「エラーなし...」が印刷されます。その後、dbは、終了する前にgetコールの1つに非同期で応答します。ここで重要なことは、usernameコールバックの結果であると仮定することはできません。birthdayです。

0

私は、それが機能はあなたが働くことができないdb.get()に渡す本命何データベースであるコードだかわからないけどあなたのコードが望むように見えます。この関数は、データベースの結果が「準備完了」または何かになるまで呼び出されないコールバックです。 には、自分のやり方で動作するget()ルーチンがありません。言い換えれば、db.get()呼び出しを「待機」できないためです。

"get()"関数を独自の関数パラメータに変更することができます。