我有这种情况,我需要多个CLI命令,它返回JSON
,读取每个结果并获取特定字段,最后将它们合并到最终JSON
。所有CLI命令都是相互独立的。
var merge = require('./object-assign');
async.parallel(
[
function(callback) {
var response = {},
error {};
var test = exec(command);
test.stdout.on('data', function(data) {
response = data;
});
test.stderr.on('data', function(data) {
error.message = data;
});
test.on('close', function() {
//callback1
callback(error, response);
})
},
function(callback) {
var response = {},
error {};
var test = exec(command);
test.stdout.on('data', function(data) {
response = data;
});
test.stderr.on('data', function(data) {
error.message = data;
});
test.on('close', function() {
//callback2
callback(error, response);
})
}
//Few more callbacks
], function(err, results) {
//using object-assign to merge
var test = merge(result[0], result[1]);
//when callback1 completes result[0] is getting values where as result[1]
//is undefined since it is getting executed.
}
);
callback1首先完成并使用result发送对最终回调的响应,并且callback2完成并发送其响应。
如何确保在最终回调中完成所有回调,以便我可以合并结果以获得最终的JSON
?
这里的异步方法是异步并行吗?如果没有,这种情况最好的是什么?
答案 0 :(得分:3)
阅读参考资料 async.js parallel
并行运行
html.on('data', function(data) { // <-- here I try to use the template text data = data.toString().replace('{title}', title); console.log(data); res.write(data); }); html.on('end', function(data) { res.end(); }); //html.pipe(res);
函数数组,无需等到上一个函数完成。如果任何函数将错误传递给其tasks
,则会立即使用错误值调用主callback
。完成callback
后,结果将作为tasks
传递给最终callback
。注意:parallel是关于并行启动I / O任务,而不是关于代码的并行执行。如果您的任务不使用任何计时器或执行任何I / O,它们实际上将被串行执行。每个任务的任何同步设置部分将一个接一个地发生。 JavaScript仍然是单线程的。
示例:
array