Node.js Stream,在此代码中正在耗尽

时间:2017-07-30 08:58:05

标签: 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 < 1e6) {
      if(fil.write("Hello man\n")) {
        i += 1;
        // console.log(i);
      }
      else {
        fil.once('drain', writer);
      }
    }
  }

  return writer;
}

const printty = printer();
printty();

我不明白为什么这个程序没有以块的形式写入数据。伯爵似乎也在1638左右。任何的想法?感谢。

1 个答案:

答案 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();`