【问题标题】:node.js Asynchronous functions [duplicate]node.js异步函数[重复]
【发布时间】:2014-10-14 08:08:24
【问题描述】:

我有这段带有 node.js 的代码。

我想做 2 个并行任务,我不在乎它们以什么顺序完成。最后两者都会在数据库中插入一些东西,但我必须先进行一些计算和一些字符串替换。

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

我执行代码 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;

}

【问题讨论】:

  • 你如何测试它首先完成?如果只是它是数组中的第一个元素,那是因为 async 将输出顺序保留为函数的顺序。

标签: javascript node.js async.js


【解决方案1】:

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

认为您传递的是实际的异步函数,异步库将通过调用您传递的第一个函数来启动第一个操作,但您在该启动操作中完成所有工作,甚至调用完成回调。所以,还没来得及开始第二个操作,你的第一个操作就已经完成了。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-07
    • 2016-01-02
    • 1970-01-01
    • 2019-01-20
    • 2019-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-12-01
    相关资源
    最近更新 更多