私はnode.jsサーバーを作成しました。テーブルからブラウザにデータを送信しようとしています(javascriptクライアントがデータを受け取っています)。ソケットio接続を介して1秒あたり1行のSQLローを送信するには?
私の問題は、テーブルからすべての行を送信したい場合、正常に動作しますが、1秒間に1行しか送信しない場合、動作しません。
これは私がやっているものです: サーバー側:
io.on('connection', function (socket) {
for (var i = 1; i < 60; i++) {
connection.query('SELECT * FROM jsonlines WHERE id="'+i+'"').on('result', function(data) {
// Push results onto the notes array
var a= JSON.stringify(data);
notes.push(a); //I want to save each line in an array notes
setTimeout(function() {
socket.emit('news', notes[i]);
console.log(a);
}, (1 * 1000));
});
}
});
だからbasicaly私は各行ごとに異なっており、私のテーブルのidを持っているが、forループ内の行を選択しています。 Settimeoutは、クエリーが完了してから1秒後にsocket.emit()がデータを送信するように1秒の遅延を行います。
しかし、console.log(a)
はすべての行をimidiatellyで印刷します。
私は間違っていますか? ありがとうございます。
あなたが任意の例外をGATますか? – Tomasito665
@ Tomasito665、いいえ、コードが動作します。問題は、関数の中で 'console.log(a)'を実行すると、私のテーブルのすべての値が直ちに1秒遅れなく取得されるということです。 私はそれを私の質問に含めます。 –
これであなたのコードを置き換えることができます:http://pastebin.com/e8EvP5rV 'console.log(endTime - startTime);'出力は何ですか?ちょうどsetTimeoutが機能するかどうか不思議です。 – Tomasito665