1

我可以在回调函数中运行一个循环(while、for、dowhile 等)吗?这是一个示例代码:

var execute = function (data,callback) 
{
    //do something with data
    callback();
}

execute (data,function(error,returnDataArray)
{
    var boo = true;
    while(boo)
    {
        //do something with returnDataArray
        if (returnDataArray.length == 10) 
            boo=false;
    }
});

现在,我的疑问是,主 node.js 线程是否等到执行上述 while 循环?

4

2 回答 2

2

您的主线程将被回调函数内部发生的循环阻塞。这是因为回调函数只是延迟到完成,然后,它们被推入 JavaScript 事件循环并在线程空闲时执行。简而言之,节点(和 JavaScript)中的所有内容都发生在单个线程中(正常执行、回调、超时等)。

使用 JavaScript 将函数执行到另一个线程的唯一方法是手动将其推送到另一个线程。在浏览器中将是一个网络工作者,在节点上是一个集群。

于 2013-05-04T19:11:45.553 回答
0

你可以有这样的东西

var execute = function (data,function(error,returnDataArray)
{
  //do something with data
  var boo = true;
  while(boo)
  {
    //do something with returnDataArray
    if (returnDataArray.length == 10) 
        boo=false;
  }
});

或者您可以使用 async 模块,使用函数 async.parallel

于 2013-05-04T19:10:26.547 回答