2015-06-30 75 views
1

我最近寫了很多NodeJS,這迫使我從不同的角度來攻擊一些問題。我想知道在異步請求環境中,爲了處理數據塊的順序(而不是並行)問題開發了哪些模式,但我一直無法找到任何直接相關的東西。異步但順序請求的模式

所以總結一下問題:

  1. 我有存儲在我需要處理數組格式的數據的列表。
  2. 我必須將這些數據異步發送到服務,但該服務一次只能接受幾個服務。
  3. 的數據必須按順序進行處理,以滿足對服務的限制,這意味着使多個並行異步請求是不允許的

在這一領域的工作,我已經拿出了最簡單的模式是遞歸的。類似於

function processData(data, start, step, callback){ 
    if(start < data.length){ 
    var chunk = data.split(start, step); 
    queryService(chunk, start, step, function(e, d){ 
     //Assume no errors 
     //Could possibly do some matching between d and 'data' here to 
     //Update data with anything that the service may have returned 
     processData(data, start+step, step, callback); 
    }); 
    } 
    else{ 
    callback(data); 
    } 
} 

從概念上講,這應該貫穿每個項目,但它很直觀地複雜。我覺得應該有一個更簡單的方法來做到這一點。在接近這種問題時,有沒有人有他們傾向於遵循的模式?

+1

你可以通過'async#eachSeries'避免遞歸https://github.com/caolan/async#seriestasks-callback – hassansin

回答

0

我的第一個思考過程是依靠對象封裝。創建一個對象,其中包含有關需要處理的所有信息以及有關正在處理和正在處理的內容的所有相關數據,並且回調函數將僅調用該對象的「下一個」函數,這將反過來開始處理下一段數據並更新對象。基本上像n異步for循環一樣工作。