2014-01-24 51 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