Javascript 在Node.js中,如何使用Node seq执行嵌套回调
我正在使用@substack的node seq模块,但遇到了一个小问题 我想做的是:两个并行的异步操作,每个操作对它们的结果做一些事情,然后在两个操作完成后,它们将修改后的结果发送给一个finishing操作 经过一些修补,我基本上实现了以下代码: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;
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');
});
;