기존 코드

function readJSONFiles() {
  fs.readdir('./.lighthouseci', (err, files) => {
    if (err) throw err;
    else {
      const jsonFiles = files.filter(file => file.startsWith('lhr-') && file.endsWith('.json'))

      const arr: string[] = [];
      jsonFiles.forEach(file => {
        fs.readFile(`./.lighthouseci/${file}`, 'utf8', (err, data) => {
          if (err) {
            console.error(err)
          } else {
            arr.push('a')
            return data
          }
        })
      })
      console.log(arr)
    }
  })
}

readFile내부에서 arr배열에 ‘a’를 담고 있다. jsonFiles에는 n개의 데이터가 담겨 있기에 fs.readFile은 n번 실행되지만, console.log(arr)를 실행하면 [] 빈배열이 출력 된다.

원인

fs.readFile()의 비동기성이 원인이었다.

해결 방법

: fs.readFileSync 사용