2012-01-13 18 views
7

私は誰かが私のためにこれを明確にすることができると思っていました。私はブラウザに、Node.jsのとサーバー側を実行し、次のコードを持っていない場合は、次のデータベース呼び出しを仮定Javascript非同期実行:コードを実行するコールバック割り込みですか?

console.log("a"); 
db.get('select * from table1', function(result){ 
console.log("b"); 
}); 
console.log("c"); 

非同期である私は

a 
c 
b 

しかし、私ならば、結果を取得する必要がありますコードの末尾に次の行を追加することでした。

while(1); 

次にbは実行されませんでしたか?

+1

これを試しましたか? –

+0

あなたはクライアントまたはサーバーのJavaScriptについて話していますか? – jfriend00

+0

私はnode.jsでサーバ側を意味しますが、それは同じであると仮定しましたが、誤解していますか? javascriptは常にシングルスレッドですか? – mlihp

答えて

5

クライアント側のJavaScriptの実行については、ブラウザが無限ループを停止するまでは正しいです。

クライアントサイドのJavaScriptはシングルスレッドなので、非同期のAjaxコールコールバックは、メインストリームの実行が完了してから、ajaxイベント用の新しいJavaScript実行ストリームが開始され、ajaxコールバック関数。

JavaScriptがイベントキューを使用してすべてのイベントをシリアル化する方法の詳細については、this postを参照してください。

編集

私は、サーバー側のNode.jsの話をしているあなたの編集ではなく、ブラウザのコードから参照してください。既定では、コールバックは新しいスレッドで実行されないため、db.get()関数呼び出しの一部として即座に実行されるか、現在の実行ストリームが終了してからdb.get()呼び出しが完了するまで実行されません。コールバックを実行することができます。

node.jsは状況によってはスレッドを使用し、内部的にスレッドを使用しますが、この種の状況では使用しません。

ここにnode.jsのスレッディングに関するgood articleがあります。

+0

サーバー側のnode.jsに関連する情報を追加しました。 – jfriend00

関連する問題