2013-05-04 149 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工作者,並在節點上成爲羣集。