Por que esse loop fs.readFile não está empurrando seus resultados para minha matriz? [duplicado

Esta pergunta já tem uma resposta aqui:

Por que minha variável permanece inalterada depois de modificá-la dentro de uma função? - Referência de código assíncrona respostas
#!/usr/bin/env node

var fs = require('fs')
  , async = require('async') 
  , program = require('commander')

program
  .version('0.0.1')
  .usage('<keywords>')
  .parse(process.argv)

async.waterfall([
  fs.readdir.bind(fs, __dirname),
  parseHTML,
], saveResult)

function parseHTML(files, callback) {
  var result = []

  files.forEach(function(file) {
    if (file.match(/\.html$/)) {
      fs.readFile(file, 'utf8', function(err, data) {
        if (err) throw err
        result.push(data)
      })
    }
  })

  callback(null, result)
}

function saveResult(err, result) {
  console.log(result)
}

Estou confuso porqueconsole.log(data) gera os dados:

<p>File 1</p>

<p>File 2</p>

Ainda a finalresult é uma matriz vazia:[]

Por que estou fazendo errado?

questionAnswers(1)

yourAnswerToTheQuestion