2
我有一个基于用户日期范围的搜索功能。有时我会看到服务器的结果,在某些情况下,它会返回空响应数组matches
。一旦处理完成,如何在异步nodejs中使用回调清除数组?
我们如何确保async.eachSeries()
已完成并将结果发送到客户端并清除下一个搜索的数组?我试图申请setTimeout
但这并没有解决问题。
search.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);
});