2015-06-26 126 views
0

我是新來的node.js,我想知道是否有可能在一個循環中同步迭代。假設在for循環中我調用了一個阻塞函數(讀取,寫入),我希望for執行同步(等待第一次迭代完成,然後執行第二次,...)?我看到一些關於異步模塊的教程,但沒有人介紹這個問題。Node.js同步循環

+0

'for'同步,並且如果您僅在for塊內調用阻塞函數,則整個循環也將同步。我真的沒有讓你問題... –

+0

爲什麼默認情況下循環不會同步? –

+0

這需要更多信息。 –

回答

4

您不應該爲此使用for循環。 for循環將同時觸發每個異步函數,這顯然不是你想要的。您應該創建自己的系統來調用這些系統。嘗試是這樣的:

  1. 你會想一個數組來保存所有URL的,你想打
  2. 你要創建一個調用列表中,等待第一個URL的功能響應
  3. 在回調函數這一號召,一旦所有的異步工作完成後,調用相同的功能,直到它出的URL的命中

應該看起來有點像這樣重新啓動過程:

var urls = new Array("google.com", "youtube.com", "stackoverflow.com"); 

function callFirstInArray() { 
    var url = urls.shift(); //removes the first from the array, and stores in variable 'url' 

    //do ajax work, and set callback function: 
    $.ajax(/*do stuff with the url variable*/, function() { 
     if (urls.length > 0) { //callback 
     callFirstInArray(); 
     }; 
    }); 
}; 

你可能無法完全按照我在這裏描述的方式工作,但它應該使用類似的概念。

注意:您可能需要額外的功能範圍,以保護您的原始URL的數組,因爲.shift()會產生變異原陣列

+0

好的。有可能使用異步來處理這種情況? – SebiSebi

+0

你是什麼意思?此解決方案處理使用異步時出現的複雜問題 –

+0

使用異步模塊。 – SebiSebi