Node.js - 寻找异步功能

时间:2014-01-24 18:18:33

标签: javascript node.js asynchronous

我在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});

我想以与数组相同的顺序返回所有这些。 任何帮助都会很棒,谢谢!

2 个答案:

答案 0 :(得分:3)

如果您暂停等待之前的结果,则表示您正在同步。只需使用Array.map()

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

// results = [2, 4, 6]

答案 1 :(得分: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在任何给定时间使用。