NodeJS:使用fs.readFile()在多个文件上搜索特定的字符串

时间:2018-08-19 09:37:37

标签: javascript node.js async-await es6-promise

我有一个对象数组,每个对象都是一个具有属性名称,路径,扩展名等的文件,如下所示:

module.exports = {
  logpath: "C:\\",
  logsfiles: [
    {
      name: "log1", // file name
      path: this.logpath, // path to log
      extension: ".log", // log extension
      type: "server", // component type (server, connector-hub, connector-component, gateway)
      licensed: true, // boolean for license holder
      iis: false, // boolean for iis exposure
      application: "N/A" // solution
    },
    {
      name: "log2", // file name
      path: this.logpath, // path to log
      extension: ".log", // log extension
      type: "server", // component type (server, connector-hub, connector-component, gateway)
      licensed: true, // boolean for license holder
      iis: false, // boolean for iis exposure
      application: "N/A" // solution
    }
  ]
}

我需要遍历此列表,方法是读取整个文件,搜索特定的字符串,如果存在此字符串,则将某些文件属性存储到数组中。

到目前为止,我是这样的:

function getFile(log) {
  return new Promise((resolve, reject) => {
    fs.readFile(
      logConfig.logpath + log.name + log.extension,
      "utf8",
      (err, data) => {
        if (err) {
          console.log(`Error reading file ${log.name}`);
          reject(err);
        } else {
          if (data.indexOf("String pattern to search") != -1)
            resolve({ name: log.name, componentkey: "TODO" });
        }
      }
    );
  });
}

我知道,如果我将其称为独立代码,那么这段代码将起作用。但是,如果我尝试在这样的循环中调用它:

async function getAllFiles(logs) {
  const finalArray = [];
  const promises = logs.map(async log => await getFile(log));
  const results = await Promise.all(promises);
  finalArray.push(results);
  console.log(finalArray); //not printing
  console.log("Done"); //not printing
}

什么也没发生...最后两张照片没有显示在控制台上...

有人可以向我展示我在做什么错吗?

Noob在这里许下诺言,对不起... :)非常感谢!

1 个答案:

答案 0 :(得分:1)

啊!知道了!

愚蠢!

由于我没有对getFile(log)的{​​{1}}声明,else的归还承诺并未解决所有问题。

涵盖了这一点,现在我得到了结果!

谢谢!