Node.js WriteStream 在关闭之前不会将数据写入文件

Joh*_*gen 5 file fs node.js

如何使数据按调用方式写入文件WriteStream.write()

编辑:事实证明,当我使用 REPL 并调用该函数时,这是有效的。但是,这在我的程序中不起作用:

import * as FS from "fs";
import { LetterGroup } from "./LetterGroup";
import { Dictionary } from "./Dictionary";
import { Word } from "./Word";
import * as OS from "os";

const groups: Array<LetterGroup> = LetterGroup.letterGroupsFromString(FS.readFileSync("./letterGroups.txt").toString());
const dictionary = Dictionary.create(FS.readFileSync("./dictionary.txt").toString());

const inputStr: string = FS.readFileSync("./input.txt").toString();
const inputWords = new Array<Word>();
const fileStream = FS.createWriteStream("./output.txt");

for (const line of inputStr.trim().split(OS.EOL))
{
    inputWords.push(new Word(line));
}

function permute(index: number)
{
    index = Math.floor(index);

    if (!(index >= 0 && index < inputWords.length))
    {
        return;
    }

    const word: Word = inputWords[index];

    let outputString: string = "";

    outputString += `Valid permutations of '${word.wordString}':` + OS.EOL;

    console.log(`Testing '${ word.wordString }'...`);

    for (const permutation of word.generatePermutations(groups, dictionary, true))
    {
        outputString += permutation.wordString + OS.EOL;
    }

    outputString += OS.EOL;
    console.log();

    if (!fileStream.write(outputString))
    {
        console.log("Wrote to file too fast! Will resume writing once the system catches up...");
        fileStream.once("drain", () => permute(index));
        return;
    }

    permute(index + 1);
}

permute(0);
Run Code Online (Sandbox Code Playgroud)

应该注意的是,这word.generatePermutations是一个极其密集的函数,通常可能需要几分钟(有时超过一个小时)才能返回。我的问题是,它返回的数据应该立即写入输出文件,这样整个程序就不需要完成运行才能读取结果。希望有人能够理解这一切。

澄清一下,WriteStream在 REPL 中写入 a 的数据会立即写入该文件,而在我的程序中,直到整个程序运行完毕才将数据写入该文件。