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

fs.appendFile not appending the data in order?

本文关键字:顺序 追加 数据 appendFile fs      更新时间:2023-09-26

下面的代码是从一个文件夹中取出两个文本文件,并将它们附加到一个文件中:

#!/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 with the content ## Doc 1, ## Doc 2和## Doc 3 respectively. The code would produce a single file called 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)。