Node.js等待循环中读取的所有文件

时间:2018-02-22 08:48:01

标签: javascript node.js

我是javascript / node.js事件驱动范例的新手。

我需要在forEach之后停止for,以确保所有文件都已被读取然后我继续。我应该如何在这种情况下实施wait_for_all_files_read()

my_list.forEach(function(element) {
  fs.readFile(element.file_path, function(err, data)  {
    if(err) throw err;
    element.obj=JSON.parse(data);
  });
});
wait_for_all_files_read(); <-----------
analyze(my_list)

解决方案[1][2]都不适合我。

1 个答案:

答案 0 :(得分:1)

我该怎么做:

  1. Promisify fs.readFile(使用,例如Bluebird)
  2. 将该功能标记为async
  3. 列出回调列表(my_list.map而不是forEach)
  4. “await Promise.all(myListOfCallbacks)”
  5. 在所有操作完成后执行await之后的下一行
  6. 类似的东西:

    const {promisisfy} = require('util')
    const fs = require('fs')
    const readFile = promisify(fs.readFile)
    
    const fileNames = getFilenamesArray();
    
    async function executeMe() {
      try {
        const arrayWithFilesContent = await Promise.all(
          fileNames.map(name => readFile(name))
        );
        return analyze(arrayWithFilesContent);
      }
      catch (err) {
        handleError(err)
      }
    }
    
    executeMe();