3

サーバーが for ループの実行中にスタックせず、他の要求を処理できるようにするにはどうすればよいですか? サーバーが他のことをしている間に for ループを並行して実行できればいいのですが。

    socket.on('drawing', function() {  
      for (var i = 0; i < x.length-1; i++)
      {
        //do stuff
      }  
    });
4

3 に答える 3

4

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: 混乱を避けるために、名前付き関数をコメントに変更しました。

于 2012-05-24T05:12:14.970 に答える
2

を使用process.nextTickして機能を移動することはできますが、完全な並列にはなりません。Node.js はイベント駆動型言語であるため、実際にはスレッドを実行しません。使用の概要を次にprocess.nextTick示します。

于 2012-05-24T03:38:20.303 に答える
1

@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.
    }
  }());  
});
于 2012-05-24T05:55:05.480 に答える