Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在Node.js中,如何使用Node seq执行嵌套回调_Javascript_Node.js_Asynchronous - Fatal编程技术网

Javascript 在Node.js中,如何使用Node seq执行嵌套回调

Javascript 在Node.js中,如何使用Node seq执行嵌套回调,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我正在使用@substack的node seq模块,但遇到了一个小问题 我想做的是:两个并行的异步操作,每个操作对它们的结果做一些事情,然后在两个操作完成后,它们将修改后的结果发送给一个finishing操作 经过一些修补,我基本上实现了以下代码: var Seq = require('seq'); Seq() .par(function () { console.log('starting action 1'); var self = this;

我正在使用@substack的node seq模块,但遇到了一个小问题

我想做的是:两个并行的异步操作,每个操作对它们的结果做一些事情,然后在两个操作完成后,它们将修改后的结果发送给一个finishing操作

经过一些修补,我基本上实现了以下代码:

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(result)的这种日志记录行为

2) 有更好的方法吗


谢谢你的帮助

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

另外,我认为您的final.seq将采用结果数组,而不是
result1,result2
。退房

尝试:


是的,成功了!非常感谢。这个链接也非常有用。但这里有一个后续问题:如果我不需要做“用结果做一些事情”那该怎么办。有没有一种更简单的方法来编写它,而不需要“var self=this”?只是一个快速的跟进-这解决了我的问题,但是它确实将results1、results2作为单独的对象而不是数组传递。再次感谢你的帮助!!感谢您的评论和反馈。我误读了链接中的代码并更新了我的答案。我认为您仍然需要通知
self(result)
以指示该功能已完成。你只需在最后一次seq通话中打一个noop。
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');
    });
;