我正在尝试使用以下程序编写一个大文件
// this program will result in "JavaScript heap out of memory"
const fs = require('fs');
const printer = function () {
const fil = fs.createWriteStream('./file');
let i = 0;
const writer = function () {
while (i < 1e6) {
if(fil.write("Hello man\n")) {
i += 1;
// console.log(i);
}
else {
fil.once('drain', writer);
}
}
}
return writer;
}
const printty = printer();
printty();
我不明白为什么这个程序没有以块的形式写入数据。伯爵似乎也在1638
左右。任何的想法?感谢。
答案 0 :(得分:1)
您正在同步循环中调用drain
并继续写入。你必须给它时间来执行。
简单的return
可以解决此问题:
const fs = require('fs');
const printer = function () {
const fil = fs.createWriteStream('./file');
let i = 0;
const writer = function () {
while (i < 1e6) {
if(fil.write("Hello man\n")) {
i += 1;
}
else {
fil.once('drain', writer);
return; // give the drain time to execute
}
}
}
return writer;
}
const printty = printer();
printty();`