2013-05-04 103 views
1

循环能否运行在回调函数的循环(同时,对,dowhile等)。下面是一个示例代码:在node.js的回调函数

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的线程等待,直到上述在执行循环?

+0

为什么不节点等待?你的循环太久会引起超时? – 2013-05-04 19:00:53

+0

是的,它会等待,用户一个不同的过程,如果它要永远走... – dandavis 2013-05-04 19:01:53

+0

嗯,你甚至尝试? – 2013-05-04 19:02:48

回答

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.parallel

+0

+1异步模块 - 不循环,尝试的map/reduce或递归,而不是循环。地图lok喜欢它会为你工作 – regretoverflow 2013-05-04 19:14:05

+0

@NikMartin:请upvote,如果你喜欢的建议之一。 – V31 2013-05-04 19:16:19

+0

如果不知道循环内部是什么,就不能说“不循环”。循环在节点中不被禁止。 – 2013-05-04 19:24:33

2

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

执行功能与JavaScript的另一个线程的唯一方法是手动将其推入另一个线程。在浏览器中,它将成为Web工作者,并在节点上成为群集。