【发布时间】:2016-06-14 05:06:54
【问题描述】:
在这种情况下,我必须执行多个 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 首先完成并将响应发送到最终回调并返回结果,callback2 完成并发送其响应。
如何确保所有回调都在最终回调中完成,以便我可以合并结果以获得最终的JSON?
异步并行是正确的方法吗?如果不是,什么是最适合这种情况的?
【问题讨论】:
-
它应该已经完成了您的要求。在解决所有并行函数之前,它不会到达最终回调
-
你检查
err变量了吗?您的callback2可能导致错误...
标签: javascript node.js async.js