项目中使用这个fs.appendFile一下打开过多也会出现报错 too many open files, open ‘xxx.txt’
function writeFileFunc(fileName, contexts, res, callBack) {
console.log("触发了writeFileFunc");
// 使用这个fs.appendFile一下打开过多也会出现报错 too many open files, open 'text/user.txt'
fs.appendFile(
fileName,
JSON.stringify(contexts) + "/n",
"utf-8",
function (err) {
console.log(err);
if (err !== null) {
console.log("写入内容失败");
res.send({
code: -1,
msg: "写入内容失败",
data: null,
});
return;
}
callBack && callBack();
}
);
}
原因是之前导入大量数据使用同步遍历处理:
const arr = [{name:'张三',...}] // 大概2000条数据以上
while (arr && arr.length > 0) {
let bodys = arr.shift();
writeFileFunc('user.txt', bodys, res);
}
为了解决这个数据追加写入文件的问题,最终使用流的方式
let userjson = 'text.json'
let writeStream = fs.createWriteStream(userjson)
function writeFileFunc(fileName, contextArr, res, callBack) {
// 数组内容存储处理
while (contextArr && contextArr.length > 0) {
let bodys = contextArr.shift();
// 内容被写入writeStream流中
writeStream.write(JSON.stringify(bodys) + "/n", "utf8");
}
// 标记流结束
// writeStream.end();
// 写入完成触发finish函数
writeStream.on("finish", () => {
res.send({
code: 0,
msg: "sucess",
data: null,
});
});
// 写入失败
writeStream.on("error", (err) => {
res.send({
code: -1,
msg: "写入内容失败",
data: err,
});
});
}