如何使用异步并行将所有回调结果合并到最终回调中
How to merge the all the callback results in final callback using Async parallel
我有这种情况,我必须执行多个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 的最终回调,回调 2 完成并发送其响应。如何确保所有回调都在最终回调中完成,以便我可以合并结果以获得最终JSON
?
异步并行在这里是正确的方法吗?如果没有,在这种情况下,什么最好?
阅读异步
.js并行的参考
并行运行函数
tasks
数组,而无需等到上一个函数完成。如果任何函数将错误传递给其callback
,则主callback
立即被调用,并带有错误的值。tasks
完成后,结果将作为array
传递给最终callback
。注意:并行是关于并行启动 I/O 任务,而不是关于代码的并行执行。如果您的任务不使用任何计时器或执行任何 I/O,它们实际上将按顺序执行。每个任务的任何同步设置部分将一个接一个地发生。JavaScript 仍然是单线程的。
例:
async.parallel([
function(callback){
setTimeout(function(){
callback(null, 'one');
}, 200);
},
function(callback){
setTimeout(function(){
callback(null, 'two');
}, 100);
}
],
function(err, results){
// the results array will equal ['one','two'] even though
// the second function had a shorter timeout.
//manipulate the responses
//JSON.stringify(results);
});
相关文章:
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 将json回调数据转换为日期
- 承诺在非节点式回调上使用Bluebird
- 如何在回调函数中执行流
- 回调函数中传递参数的困难(Google Map API Markers)
- Soundcloud Javascript SDK 3.0-回调无法读取属性'connectCallback
- 如何使用jqueryAJAX从页面中回调多个变量
- jquery Onclick函数带有导致双击的回调排序函数
- Javascript点击事件回调不起作用
- 如何使用异步并行将所有回调结果合并到最终回调中
- 如何合并我的 JavaScript 文件,并且仍然让我的回调等待就绪状态
- 试图了解如何将回调合并到Node.js/SQLITE中
- 我正在尝试创建“合并函数”.通过编写回调来工作