2016-07-21 132 views
1

我必須迭代給定的JSON對象,併爲其中的每個對象創建一個任務。給定的任務也需要來自這個JSON對象的信息,我不知道如何將這些信息傳遞給我的任務,以便它在執行時可用。將參數傳遞給async.js任務

建立我的任務數組:

var asyncScrapeTasks = []; 
var resources = JSON.parse(body); 
for(var i=0; i<resources.items.length; i++) 
{ 
    asyncScrapeTasks.push(function (callback) 
    { 
     console.log(resources.items[i].id); 
    }); 
} 

執行我的任務:

async.parallelLimit(asyncScrapeTasks, 5, function() { 
    callback(null, "Done"); 
}); 

我的問題:

眼下console.log(resources.items[i].id);回報不確定,這是有道理的,我,因爲e索引i在執行函數時不知道,但我不知道如何解決我的問題。

+0

你的代碼是有點不完整的,因爲的console.log不是一個異步函數。你能舉一個更具體的例子來說明你想要做什麼嗎? – slebetman

+0

@slebetman是的,我試圖儘可能簡化它。基本上我想從外部URL獲得一個json對象並從這個json文件中獲取特定的信息,以便將其存儲在我自己的數據庫中。 – kentor

+0

但是你的評論'因爲在執行函數時我不知道的資源'根據這個例子沒有任何意義。如果這是真的發生了什麼,那麼你發佈的例子是錯誤的(你已經簡化了它,以至於完全消除了這個問題) – slebetman

回答

2

由於我沒有足夠的聲望來添加評論,我寫作答案。抱歉。

是否有任何特定的原因使用paralleLimit? async.js每個都可以迭代收集並對每個項目執行操作。此函數並行地將迭代函數應用於集合中的每個項目。 async.js each

如果你想限制操作: async.js eachLimit

+0

我不是100%相信我有每個和平行之間的主要區別?我剛剛讀到並行開始並行I/O任務,這正是我正在做的,因爲我通過URL調用外部Web服務器來請求信息。我認爲你的觀點是我可以直接在resource.items.eachLimit上迭代,這是正確的嗎?我是新來的async.js – kentor

+0

是的,你可以使用eachLimit,在迭代中你可以調用你的休息api。 [asyc.js文檔](http://caolan.github.io/async/docs.html#)描述了其他的風格,並在每個示例下面提供了源代碼的鏈接。 –