我正在尝试使用以下程序写入一个大文件
// 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();
我不明白为什么这个程序不以 block 的形式写入数据。而且计数似乎停留在 1638
左右。任何想法?谢谢。
最佳答案
您正在同步循环中调用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();`
关于javascript - Node.js Stream,是在这段代码中工作的 Drain,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45398101/