我在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;
}
答案 0 :(得分:2)
这些不是实际的异步函数。它们同步运行,因此async
库无法同时运行它们。它将按照您传递的顺序运行它们。
认为您正在传递实际的异步函数,异步库将通过调用您传递的第一个函数来启动第一个操作,但您在该启动操作中完成所有工作,甚至调用完成回调。因此,在它有时间开始第二次操作之前,您的第一次操作已经完成。
请记住,异步库不会使异步操作成为异步操作。它只是帮助您管理和排序操作,其中一些操作可能是实际的异步操作。