在Node.js中,如何使用node-seq进行嵌套回调

时间:2013-12-21 04:06:11

标签: javascript node.js asynchronous

我正在使用@substack的node-seq模块,但是碰到了一点点。

我想要做的是:2个并行异步操作,每个操作都对其结果执行某些操作,然后一旦完成,就会将修改后的结果发送到完成操作。

经过一些修补,我得到的代码基本上可以工作:

var Seq = require('seq');


Seq()
    .par(function () {
        console.log('starting action 1');
        var self = this;
        someModule.someAsyncMethod(function(result) {
            // do some stuff with result
            console.log('finishing action 1');
            self(result);
        });
    })
    .par(function () {
        console.log('starting action 2');
        var self = this;        
        someModule.someAsyncMethod(function(result) {
            // do some stuff with result
            console.log('finishing action 2');
            self(result);
        }); 
    })
    .seq(function(result1, result2) {
        console.log('all actions done');
    });
;

问题是,self(result)将结果发送到console.log。我已经阅读了文档,但不明白为什么会这样。

我的问题是:

1)有没有办法关闭self(结果)的记录行为?

2)有更好的方法吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:3)

我相信你应该做self(null, result)。典型的回调将错误作为第一个参数,结果作为第二个参数。

另外,我认为你的最终.seq会采用结果数组,而不是result1, result2。查看http://substack.net/seq

尝试:

Seq()
    .par(function () {
        console.log('starting action 1');
        var self = this;
        someModule.someAsyncMethod(function(result) {
            // do some stuff with result
            console.log('finishing action 1');
            self(null, result);
        });
    })
    .par(function () {
        console.log('starting action 2');
        var self = this;        
        someModule.someAsyncMethod(function(result) {
            // do some stuff with result
            console.log('finishing action 2');
            self(null, result);
        }); 
    })
    .seq(function(result1, result2) {
        console.log('all actions done');
    });
;