将使用异步解析的文件添加到 JavaScript 中的数组

Add files parsed with async to an array in JavaScript

我需要能够遍历一组文件路径并过滤掉其中不包含特定字符串的文件。目标数组 returns 是一个空数组,但我希望目标数组包含不包含该字符串的文件列表,并解析结果以删除直到分隔符最后一个实例的子字符串。

const fs = require('fs')

const fileList = ['/L1/L2/file1', '/L1/L2/file2', '/L1/L2/file3', '/L1/L2/file4']
const filterText = 'filter files that contain me'
let targetArray = []

async function parseIncompleteDocumentation() {
  try {
    const delimiter = '/'
    for (let componentFile of coveredComponentsDirectoryList)
      return new Promise((resolve, reject) => {
        fs.readFile(componentFile, 'utf8', function(err, content) {
          if (err) {
            reject(err)
          } else if (!content.includes(incompleteDocumentationFilter)) {
            resolve(
              existingIncompleteComponentDocumentationList.push(
                componentFile.substring(
                  componentFile.lastIndexOf(delimiter) + 1,
                  componentFile.length
                )
              )
            )
          }
        })
      }
    )
  } catch (err) {
    return console.log('error message', err) // eslint-disable-line no-console
  }
}

const finalArray = await parseFiles()
console.log(finalArray) // returns empty array

如果 file1file3 包含 filterText,所需的输出将是 ['file2', 'file4']

选项很少:

  1. 在 for...of 循环中使用 async/await。

    for (let file of fileList) {
    
      await new Promise((resolve, reject) => {
          fs.readFile(file, 'utf8', (err, content) => {
    
             if (err)
               return reject(err);
    
             //....
             resolve()
          })
      })
    }
    
  2. 使用 readFileSync

    fileList.forEach(file => {
    
       try{
          let content  = fs.readFileSync(file, 'utf8');
          //...
       }
       catch(e) {
          //....
       }
    })