【发布时间】:2021-11-08 04:38:45
【问题描述】:
我有一个简单的代码来将一个 js 列表写入一个 js 文件。
// Requiring fs module in which
// writeFile function is defined.
var fs = require('fs');
// first overwrite any pre-existing file with the start of the list
fs.writeFile('Output.js', 'export const addressPoints = [', function (err) {
if (err) throw err;
console.log('Create file Output.js');
});
for (let i = 0; i < 100; i++) {
// var string_row = "[" + latlon_datum1_row[i] + "],";
var string_row = "HI"
console.log(string_row);
fs.appendFile('Output.js', string_row, function (err) {
if (err) throw err;
console.log('Writing file contents line', i);
});
}
fs.appendFile('Output.js', '];', function (err) {
if (err) throw err;
console.log('Append file Output.js');
});
可以分为三个部分,一个初始组件创建新的js脚本并添加'export const addressPoints = ['。之后,运行一个 for 循环来写入列表中的项目,最后是 '];'附加到文件末尾。
很奇怪,代码没有按预期工作。人们会期望控制台日志看起来像
Create file Output.js
Writing file contents line 1
Writing file contents line 2
Writing file contents line 3
...
Writing file contents line 99
Append file Output.js
但是,输出被打乱并以错误的顺序写入(显示最后几行):
...
Writing file contents line 96
Writing file contents line 97
Writing file contents line 98
Append file Output.js
Writing file contents line 99
Writing file contents line 91
Writing file contents line 79
Writing file contents line 68
有没有一种方法可以更快地做到这一点?如果不是,为什么会出现这个错误?我认为它与 fs 闭包有关,但我对 js 不太熟悉。
【问题讨论】:
-
您最好打开文件一次并在它打开时写下您需要写的内容,然后在最后关闭它。每次执行“追加”操作时,操作系统都必须找到并重新打开该文件。
-
谢谢你们!我已经设法解决了。
标签: javascript node.js arrays fs