node.js异步函数

时间:2014-10-13 23:34:10

标签: javascript node.js async.js

我在node.js上有这段代码。

我想做两个平行的任务,我不在乎他们完成的顺序。最后两者都会在数据库中插入一些内容,但我必须首先进行一些计算和一些字符串替换。

当我运行这个位时,我的测试功能总是先完成是否正常?

我执行代码10-20次,测试总是在test2之前完成。

async.parallel([
function (callback) {
    v2 = test(200);
    callback(null, v2);
},
function (callback) {
    v3 = test2(300);
    callback(null, v3);
}
], function (err, results) {
    console.log(results)
});

我的测试函数在这里有2-3个嵌套的for循环,会在内存中计算很多信息。

function test(a) {
    for (var i = 0; i < 1000000; i++) {
        a = a + 1;
    }
    console.log('Finished 1');
    return a + 100;

}

此功能应首先完成,因为其中只有一个操作...

function test2(a) {

    console.log('Finished 2');
    return a + 200;

}

1 个答案:

答案 0 :(得分:2)

这些不是实际的异步函数。它们同步运行,因此async库无法同时运行它们。它将按照您传递的顺序运行它们。

认为您正在传递实际的异步函数,异步库将通过调用您传递的第一个函数来启动第一个操作,但您在该启动操作中完成所有工作,甚至调用完成回调。因此,在它有时间开始第二次操作之前,您的第一次操作已经完成。

请记住,异步库不会使异步操作成为异步操作。它只是帮助您管理和排序操作,其中一些操作可能是实际的异步操作。