以下代码的作用是从文件夹中获取几个文本文件并将它们附加到文件中:
#!/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
特别是当文件很多时。
如何修改代码以防止出现此问题?
答案 0 :(得分:1)
您可以将fs.appendFile
更改为fs.appendFileSync
(快速而肮脏,但不是最佳解决方案),或者您可以使用eachSeries
async
方法系列地运行事件} module(https://www.npmjs.com/package/async#eachSeries)。