首页 > 解决方案 > Javascript readdirSync - 计算函数外的字符串数

问题描述

我正在尝试编写一个脚本,允许我在多个文件夹中搜索字符串,然后返回输出。我设法找到了我想要的 readdirSync 函数,但是我无法打印出找到的字符串总数,因为它是在函数完成之前运行的。请看下面的例子。

var totalNumberOfStringFound = 0;

function numberofStringsInFolder(dir, search) {
var fs = require('fs');
var results = [];
var searchTerm = search;

fs.readdirSync(dir).forEach(function (file) {
file = dir + '/' + file;
var stat = fs.statSync(file);

if (stat && stat.isDirectory()) {
  results = results.concat(numberOfTagsInFolder(file));
} else {
  fs.readFile(file, bar);
  function bar(err, data) {
    err ? Function('error', 'throw error')(err) : (fileContent = data.toString('utf8'));
    var count = (fileContent.match(new RegExp(searchTerm, 'gi')) || []).length;
    totalNumberOfStringFound = totalNumberOfStringFound + count;
    console.log('NUMBER OF STRINGS FOUND: ' + totalNumberOfStringFound);
  }
  // Holds the list of files found
  results.push(file);
}
});
  console.log("totalNumberOfStringFound: " + totalNumberOfStringFound);
  return results;
}

 numberofStringsInFolder('./folder', 'HELLO');

输出

 totalNumberOfStringFound: 0
 NUMBER OF STRINGS FOUND: 2
 NUMBER OF STRINGS FOUND: 3

输出(totalNumberOfStringFound)应该是3,但是因为totalNumberOfStringFound是在函数完成之前调用的,所以显示为0。我在网上看了,有人使用超时功能,但我不想使用它,因为我不知道需要多长时间才能完成。如果有人可以提供帮助,我将不胜感激。谢谢

标签: javascripttypescriptfunctionfile-iopromise

解决方案


推荐阅读