サーバーが for ループの実行中にスタックせず、他の要求を処理できるようにするにはどうすればよいですか? サーバーが他のことをしている間に for ループを並行して実行できればいいのですが。
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
サーバーが for ループの実行中にスタックせず、他の要求を処理できるようにするにはどうすればよいですか? サーバーが他のことをしている間に for ループを並行して実行できればいいのですが。
socket.on('drawing', function() {
for (var i = 0; i < x.length-1; i++)
{
//do stuff
}
});
Async.jsには、 foreachやwhileなどのヘルパー関数が多数あり、まさにここで求めていることを実行します。
編集:
完全な例を次に示します。
async = require('async');
var i = 0
async.whilst(
// test
function() { return i < 5; },
// loop
function(callback) {
i++;
console.log('doing stuff.');
process.nextTick(callback);
},
// done
function (err) {
console.log('done!');
}
);
どの出力:
doing stuff.
doing stuff.
doing stuff.
doing stuff.
done!
編集 2: 混乱を避けるために、名前付き関数をコメントに変更しました。
を使用process.nextTick
して機能を移動することはできますが、完全な並列にはなりません。Node.js はイベント駆動型言語であるため、実際にはスレッドを実行しません。使用の概要を次にprocess.nextTick
示します。
@Slace の回答に基づいて、非同期再帰を使用できます。
socket.on('drawing', function {
var i = 0;
(function someFunction() {
if (i < x.length - 1) {
i++;
// Do stuff.
process.nextTick(someFunction)
} else {
// Do something else.
}
}());
});