javascript - 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。我在网上看了,有人使用超时功能,但我不想使用它,因为我不知道需要多长时间才能完成。如果有人可以提供帮助,我将不胜感激。谢谢
解决方案
推荐阅读
- arrays - 如何在 golang 中编写具有嵌套递归数据的结构
- python-2.7 - cv2.error: OpenCV(4.1.0) /io/opencv/modules/imgproc/src/resize.cpp:3555: 错误: (-215:Assertion failed) func != 0 && cn <= 4 in function'resize'
- c++ - 如何制作一个递归函数来显示有多少元音有输入
- html - 如何垂直排列弹性容器内的元素?
- matlab - 计算残差平方和?
- kivy - 如何根据窗口大小裁剪图像?
- reactjs - 高阶组件不通过道具
- c# - 在 Unity 中处理单个字符输入
- swift - 使用 Realm 删除 TableView 中的行
- python - 使用 importlib 运行多个 Python 脚本