我的情况是我拥有一系列员工数据,我需要为每个员工处理并行处理。为了实现它并完成任务,我将事情分解为四个方法,每个方法都有一个回调相互调用并返回回调。我正在使用
async.eachSeries
为员工数组的每个元素启动流程。
在最后一个方法中,我必须设置setInterval以执行相同的任务,如果未达到所需的响应,则在重复任务的过程持续5次之前不会清除此间隔(如果未收到所需的值5次,但是在第5次之后清除。)
现在,发生的问题是我在setInterval中处理的数据被最后一个员工的值覆盖。
因此,我无法跟踪所有员工数组元素的流程,并且最后一名员工的处理细节也变得混乱。
我用于执行任务的四种方法之间正在执行将数据保存到redis,MongoDB,Outside Api以在回调中给出响应的过程。
任何人都可以建议更好的方法这样做,我也觉得问题正在发生,因为我没有从SetInterval方法()返回任何回调。但是因为那个方法本身是一个异步方法所以我不知道如何处理情况。
EmployeeArray
async.eachSeries() used to process EmployeeArray
对于每个我有四个回复Medhods。
async.eachSeries() {
Callback1(){
Callback2(){
Callback3(){
Callback4(){
SetInterval(No CallBack inside this from my side)
}
}
}
}
}
答案 0 :(得分:0)
据我所知,异步每个函数都进行并行处理。您也可以使用异步瀑布来使您的代码更干净。尝试这样的事情。
async.each(openFiles, function(file, callback1) {
async.waterfall([
function(callback) {
callback(null, 'one', 'two');
},
function(arg1, arg2, callback) {
// arg1 now equals 'one' and arg2 now equals 'two'
callback(null, 'three');
},
function(arg1, callback) {
// arg1 now equals 'three'
callback(null, 'done');
}
], function (err, result) {
callback1(err);
});
}, function(err){
//if you come here without error your data is processed
});