我正在接收包含对象数组 (requestArray) 的 POST 调用。在响应 POST 之前,我需要按顺序通过一系列函数传递数组的对象。我选择了异步库来帮助我完成这项任务,但是我很难控制代码的执行流程。
我正在使用一个全局数组来存储每个函数(responseArray)的结果。一些函数取决于先前函数的结果。我不想使用 async.waterfall() 因为 1. 我必须重写我的代码 2. 我可能会遇到相同的早期循环终止问题。下面是我的代码有问题的代码。
app.post('/test', function(req, res) {
var importArray = req.body;
var iteration = 0;
async.eachSeries(importArray, function(data, callback) {
var index = importArray.indexOf(data);
var element = data.element;
exportArray[index] = [];
async.series([
function(callback) {
process1(data, index, callback);
},
function(callback) {
process2(element, index, callback);
},
function(callback) {
process3(element, index, callback);
}],
function(err, results) {
var str = {};
results.forEach(function(result) {
if (result) {
str += result + ',';
}
});
//callback(); // callback here = synchronous execution.
if (index === req.body.length - 1) {
res.send(exportArray);
}
});
console.log('async.eachSeries() callback iteration # = ' + iteration);
iteration++;
callback(); // callback here = asynchronous execution.
}, function(err){
if( err ) {
console.log('Error');
} else {
console.log('All data has been processes successfully.');
}
});
});
async.series() 中的每个函数都返回 callback(null, result)。在 process1() 返回其回调后, async.eachSeries() 会跳转到之前的下一个数组条目,这是理想的。但是, async.eachSeries() 在返回所有 async.series() 结果之前执行 POST 响应。我如何修改我的代码,以便在我发送 POST 响应之前从 process1-3 返回所有 importArray 结果(exportArray)之后完成执行?