javascript - fs.appendFile 没有按顺序追加数据?

标签 javascript node.js

以下代码的作用是从一个文件夹中取出几个文本文件并将它们附加到一个文件中:

#!/usr/bin/env node

'use strict'

const fs = require('fs')
    , input = process.argv[2]

if (process.argv.length < 3) {
  console.log('Usage: node ' + process.argv[1] + ' FILENAME')
  process.exit(1)
}

fs.readdir(__dirname + `/${input}/`, (err, files) => {
  if (err) {
    return
  }

  files.forEach((file, index) => {
    fs.readFile(__dirname + `/${input}/` + file, 'utf8', (err, data) => {
      let result

      if (err) {
        console.log(err)
      }

      if (index == files.length - 1) {
        result = `${data}`
      } else {
        result = `${data}\n`
      }

      fs.appendFile("merged.txt", result, (err) => {
        if (err) {
          console.log(err)
        } else {
          console.log(result)
        }
      })
    })
  })
})

假设我有一个名为 docs 的文件夹,里面有 doc1.txt、doc2.txt、doc3.txt及其内容## Doc 1, # # Doc 2 和 ## Doc 3 分别。该代码将生成一个名为 merged.txt` 的文件,其内容为:

## Doc 1

## Doc 2

## Doc 3

它工作正常。但有时顺序是错误的。我会得到类似的东西:

## Doc 1

## Doc 3

## Doc 2

特别是当有很多文件时。

如何修改代码以防止出现此问题?

最佳答案

您可以将 fs.appendFile 更改为 fs.appendFileSync(快速而肮脏,但不是最佳解决方案),或者您可以使用 连续运行事件async 模块的 >eachSeries 方法 ( https://www.npmjs.com/package/async#eachSeries )。

关于javascript - fs.appendFile 没有按顺序追加数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30448386/

相关文章:

javascript - Active Bootstrap 选项卡在 DropDown SelectedIndexChanged 事件中丢失其索引?

javascript - 如何在对 Angular 客户端应用程序的响应中发送 API key ?

node.js - 输入任何命令后使用 npm 命令

php - Apache/PHP 和 Systemd/node 可读的环境变量

javascript - 什么事件指定了 node.js 中的 tick 结束时间?

php - 可以根据复选按钮实时向 html 代码添加文本吗?

javascript - 在 div 中的 insideHTML 的每次更改中添加 EventListener

javascript - jQuery Validate - 如何在 "required"内运行函数而不在加载时执行它

node.js - nodejs 夏普 : transparent into white

javascript - 无法对 POST 请求进行 GET