2014-01-24 79 views
1

我正在尋找Node.js中的一個模塊,它將爲數組中的每個項目運行一個函數,但會暫停數組中下一項的執行,直到最後一個值返回爲止。Node.js - 尋找異步函數

我有async.concatSeries()運行一系列請求函數。

看起來像這樣

var foo = [id,id,id]; 
function bar(){//do something then return value} 
async.concatSeries(foo, bar, function(err, result){//log result}); 

我想回到所有這些在相同的順序排列。 任何幫助將是偉大的,謝謝!

+0

當你希望它按順序執行時,它是一個'異步'功能嗎? – grebneke

+0

@grebneke,在下面的回答評論中提到,順序與同步不一樣。異步函數可以按順序執行,而不是同步的,因爲順序跨越多個滴答。 – qubyte

回答

2

如果您暫停等待以前的結果,您正在同步。只需使用Array.map()

results = [1, 2, 3].map(function(element, index) { 
    return element * 2; 
}); 

// results = [2, 4, 6] 
+0

這是與順序同步混合。函數可能會在多個滴答中依次處理,這不是同步的。 – qubyte

+0

這是巨大的!感謝您的幫助。 – MonsterWimp757

1

有些時候,它可能是按順序運行任務的一個好主意,或批處理他們限制傳出連接等

最有名的圖書館是async。有了它,你的代碼看起來像:

var async = require('async'); 

// Some array of data. 
var ids = [0, 1, 2, 3, 4, 5]; 

// Async function applying to one element. 
function getUser(id, callback) { 
    // A call to a datastore for example. 
    if (err) { 
     return callback(err); 
    } 

    callback(null, user); 
} 

async.mapSeries(ids, getUser, function (err, users) { 
    // You now have an error or an array of results. The array will be in the 
    // same order as the ids. 
}); 

您還可以使用async.map並行執行,並async.mapLimit並行執行與數量有限,在任何給定時間使用的ids