Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Node.js Stream,在这段代码中是否使用了drain_Javascript_Node.js - Fatal编程技术网

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()`