2017-06-21 8 views
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); 
}); 

答えて

0

非同期には、次の構文を提供します。

eachSeries(coll, iteratee, callback) 

ここで、コールバックは、すべての反復関数が終了したときにのみ呼び出されます。これを使用する

、あなたは結果アレイポストeachSeriesをクリアする必要があり

function (err){ 
    if(err) {//handle err} 
    results = [] 
} 

へのコールバック関数を更新することができ

関連する問題