我的英语不太好,所以我希望能说清楚。
为了好奇,我想在同一个文件上测试多个并发(*)文件写入,看看是否会产生错误。
手册很清楚:
请注意,同时使用
fs.writeFile
多次是不安全的 文件无需等待回调。对于这种情况, 强烈建议使用fs.createWriteStream
。
因此,如果我将一个相对大量的数据写入一个文件,并且在它仍在写入的时候,我会在同一个文件上调用另一个文件而不等待回调...我期待某种错误
我试着写一个小例子来测试这种情况,但我无法看到任何错误。
"use strict";
const fs = require('fs');
const writeToFile = (filename, data) => new Promise((resolve, reject) => {
fs.writeFile(filename, data, { flag: 'a' }, err => {
if (err) {
return reject(err);
}
return resolve();
});
});
const getChars = (num, char) => {
let result = '';
for (let i = 0; i < num; ++i) {
result += char;
}
return result + '\n';
};
const k = 10000000;
const data0 = getChars(k, 0);
const data1 = getChars(k, 1);
writeToFile('test1', data0)
.then(() => console.log('0 written'))
.catch(e => console.log('errors in write 0'));
writeToFile('test1', data1)
.then(() => console.log('1 written'))
.catch(e => console.log('errors in write 1'));
要测试它而不是用某个编辑器打开文件(在我的框中有点慢)我使用linux命令查看第一个缓冲区的结束和第二个缓冲区的开头(并且它们是不重叠):
tail -c 10000010 test1 | grep 0
但我不确定这是测试它的正确方法。
只是要明确我使用的是节点v6.2.2和mac 10.11.6。
那边有人能指出一个使用fs.writeFile
产生错误输出的小草图吗?
(*)concurrent =不要等待一个文件写入结束以开始下一个文件