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这正是你在这里所要求的。

编辑:

这是一个完整的例子:

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 回答