fs.appendFile没有按顺序追加数据
fs.appendFile not appending the data in order?
下面的代码是从一个文件夹中取出两个文本文件,并将它们附加到一个文件中:
#!/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)。
相关文章:
- 表追加而不附加最后一个元素
- ajax请求的顺序总是不同的
- 按照选项卡索引的顺序循环一个jQuery选择
- 匹配一个单词,其中候选人可以跨越顺序组(跨度)
- 按顺序添加和删除类
- 按我自己的类克隆另一个元素的内容和顺序
- Javascript-根据赋值顺序,按键合并对象数组
- 2个backbone.js集合,具有相同的模型,但排序顺序不同
- querySelector/getElementByClassName嵌套项的顺序
- 如何在jquery中停止在更改时追加值
- 以不同的顺序输出数据
- 重新排列HTML元素的顺序并更改内容
- JQuery.on(“keydown”)追加到页面时不工作
- 在Javascript中列出顺序子集元素
- 是否“;对于的“;循环迭代遵循JavaScript中的数组顺序
- js”;在“;不按特定顺序追加键/值
- 按相同顺序将数组元素追加到另一个数组
- Can多个fs.写入追加到同一文件保证执行顺序
- 追加子节点的顺序是否重要
- fs.appendFile没有按顺序追加数据