同时运行多个异步函数

3

我有一个对象,包含两个不同的方法

var samp {
 m1: func1,
 m2: func2
}

根据我想调用的键数,我希望同时调用所有三个函数。现在我正在使用以下代码进行串行运行。

switch (sampType) {
            case "m1":
            {
                return new func1();
                break;
            }
            case "m2":
            {
                return new func2();
                break;
            }
            default:
            {
            }
        }

我如何在Node.js中并行执行所有方法?任何关于此的帮助都将非常有用。


你的例子中没有任何异步逻辑,你能详细说明一下你想要什么吗?由于Node是单线程的,所以你不能同时运行3个同步任务。 - loganfsmyth
@loganfsmyth 你说的没错,Node.js是单线程的。所以我们不能并行执行函数吗? - user87267867
我的需求是同时运行所有函数,而不必等待一个函数完成。 - user87267867
3个回答

4

请查看async.parallel。你需要写的代码大致如下:

async.parallel( [

    function ( callback ) {
        // Code
    },

    function ( callback ) {
        // Code
    }

], function ( error, results ) {
    // Both done
} );

不要使用switch case,而是要使用async.parallel?func1()涉及I/O操作,那么async会正常工作吗? - user87267867
是的。在您的I/O回调中,只需调用callback(error)即可。有意义吗? - fakewaffle

1
另一种优雅的方法是使用“连线”来实现:
var l = new Wire();

func1(l.branch('post'));
func2(l.branch('comments'));

l.success(function(results) { ... });
// result will be object with results: { post: ..., comments: ...}

https://github.com/garmoshka-mo/mo-wire


1

请尝试使用Step.jsbacon.jsasync

使用bacon.js,您可以做到以下事情:

var result  = Bacon.fromNodeCallback(func1, parameters).toProperty();
var onemore = Bacon.fromNodeCallback(func2, parameters).toProperty();

这两个函数将并行执行。然后您可以编写一个函数来使用这两个变量,如下所示:

var combined = Bacon.combineAsArray(result, onemore);
combined.onValue(function (an_array) {
   // do stuff with an_array, which contains result and onemore
});

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接