Javascript Node.js Stream,在这段代码中是否使用了drain
我正在尝试使用以下程序编写一个大文件Javascript Node.js Stream,在这段代码中是否使用了drain,javascript,node.js,Javascript,Node.js,我正在尝试使用以下程序编写一个大文件 // 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 < 1e
// 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();
//此程序将导致“JavaScript堆内存不足”
常数fs=要求('fs');
常量打印机=函数(){
const fil=fs.createWriteStream('./文件');
设i=0;
常量编写器=函数(){
而(i<1e6){
if(fil.write(“Hello man”\n)){
i+=1;
//控制台日志(i);
}
否则{
一次文件(“排水管”,书写器);
}
}
}
返回作者;
}
常量printty=打印机();
printty();
我不明白为什么这个程序不分块写数据。此外,计数似乎在1638左右徘徊。有什么想法吗?谢谢。您正在同步循环中调用
排水管
,并立即继续编写。你必须给它时间去执行
一个简单的返回可以解决以下问题:
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();`
const fs=require('fs');
常量打印机=函数(){
const fil=fs.createWriteStream('./文件');
设i=0;
常量编写器=函数(){
而(i<1e6){
if(fil.write(“Hello man”\n)){
i+=1;
}
否则{
一次文件(“排水管”,书写器);
return;//给出执行的排出时间
}
}
}
返回作者;
}
常量printty=打印机();
printty()`