2016-08-14 7 views
-2
conn = mysql.createConnection(options); 
    conn.connect(); 
    var sql = 'select * from member'; 

    for(var i=0; i<3; i++){ 
     (function(){ 
     console.log(i); 
     conn.query(sql, function(err,result){ 
      console.log('q'); 
     }) 
     })(i) 
    } 
     for (var i=0; i<2; i++){ 
     console.log(i) 
     } 

私はnpm-mysqlを使用しています。 私はコンソールに '012qqq01'と表示されると思っていましたが、実際には私は '01201qqq'を得ました。 私は混乱しています。なぜ、「conn.querry」が最後に実行されるのですか?前もって感謝します。nodejsはmysqlを使用して注文を実行します

+1

非同期に実行される 'con.query'の第2引数として渡すコールバック(または関数)はありませんか?それがその方法で実行されると、それはあなたの出力を説明するかもしれません... – nbro

+0

重複 - http://stackoverflow.com/questions/38945606/node-js-does-not-wait-for-the-mysql-server-sends -the-answer-and-continued-wo- –

+0

非同期コードに慣れていないなら、Node.jsコードを書き込む前に、非同期コードを処理する必要があります。それは、この原則が運転哲学であるという点では、極端に*依存しています。 – tadman

答えて

0

ログにはiを記録し、クエリをループ内でデータベースに、ログを別のループで送信する機能があります。その機能は実行されます。

この処理が実行されている間、または処理が完了した後のある時点で、クエリの結果がデータベースから返されます。

JSエンジンが最初の機能を実行していなくても、データベースからの応答を示すイベントが到着したかどうかを確認するためのチェックが開始されます。それからコールバック関数を呼び出して、 'q'を記録します。

+0

愚かな質問への賢明な答えをどうもありがとう。私は、JSエンジンが忙しい場合、JSエンジンがコールバックを呼び出すのだろうか?あるいは、応答が到着したとしても、コールバックを呼び出さずに、忙しい作業をしているだけでしょうか? – user6607973

+0

それは何をしていてもそれを続けます。それはイベントに応答する何かの真ん中で停止しません。 – Quentin

関連する問題