我有一个基于用户日期范围的搜索功能。有时我会看到来自服务器的结果,在某些情况下它会返回空响应数组matches
。
我们如何确保 async.eachSeries() 完成并将结果发送到客户端并清除数组以进行下一次搜索?我尝试应用 setTimeout
但这并没有解决问题。
搜索.js
var matches;
var results = [];
// loop through each file
async.eachSeries(filesData.logFiles, function(logfile, done) {
// read file
readStream = fs.createReadStream('./logs/' + filesData.searchEnv + '/' + logfile.filename, 'utf8')
readStream.pipe(split())
.on('data', function(line) {
if (typeof searchStr === 'string') {
multipleStrFlag = false;
if (messageDateInfo - searchStartDate > 0 && searchEndDate - messageDateInfo > 0) {
results.push({
filename: logfile.filename,
value: line
});
}
} else {
multipleStrFlag = true;
if (messageDateInfo - searchStartDate > 0 && searchEndDate - messageDateInfo > 0) {
results.push({
filename: logfile.filename,
value: line
});
}
};
});
done();
}, function(err) {
if (err) {
console.log('error', err);
}
});
readStream.on('end', function() {
if (multipleStrFlag) {
var matchingCondition = function matchingCondition(_ref) {
var itemB = _ref.itemB,
itemA = _ref.itemA;
return itemB.value.includes(itemA);
};
// filter all items from B that satisfy a matching condition with at least one item from A
matches = results.filter(function(itemB) {
return searchStr.every(function(itemA) {
return matchingCondition({
itemB: itemB,
itemA: itemA
});
});
});
} else {
matches = results;
}
setTimeout(function,(){
callback(matches);
matches = [];
results = [];
},1000);
});
最佳答案
async 提供以下语法。
eachSeries(coll, iteratee, callback)
其中只有当所有 iteratee 函数完成时才会调用回调。
使用它,您可以将回调函数更新为
function (err){
if(err) {//handle err}
results = []
}
这应该清除每个系列后的结果数组
关于javascript - 处理完成后如何使用异步nodejs中的回调清除数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44683367/