javascript - 处理完成后如何使用异步nodejs中的回调清除数组?

标签 javascript arrays node.js

我有一个基于用户日期范围的搜索功能。有时我会看到来自服务器的结果,在某些情况下它会返回空响​​应数组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/

相关文章:

javascript - 如何检查 url 是否在 NodeJs 中同步存在?

javascript - console.log 无法获取端口变量,我已经提供了屏幕截图

javascript - 使用 JQuery 的语义 UI 下拉列表 - 如何使用 JQuery 初始化语义 UI 下拉列表

javascript - 查看 ContentEditable div 是否有焦点

ios - 尝试使用 for 循环并将其替换为某个值

javascript - app.use() 需要中间件函数

javascript - 从现有数据源创建新的 Kendo UI 数据源

javascript - php服务器无法使用$.http().post请求从angularjs接收json变量

c - 指导我将数字除以 10,然后转换为字符串

Ruby - 将数组元素值与其他元素进行比较