我正在使用@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)有更好的方法吗?
感谢您的帮助!
答案 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');
});
;