Node.js WriteStream不';在关闭之前,不要将数据写入文件

Node.js WriteStream不';在关闭之前,不要将数据写入文件,node.js,file,fs,Node.js,File,Fs,如何使数据以调用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

如何使数据以调用
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);
import*作为FS从“FS”导入;
从“/LetterGroup”导入{LetterGroup};
从“/Dictionary”导入{Dictionary};
从“/Word”导入{Word};
从“OS”导入*作为OS;
常量组:Array=LetterGroup.letterGroupsFromString(FS.readFileSync(“./letterGroups.txt”).toString();
const dictionary=dictionary.create(FS.readFileSync(“./dictionary.txt”).toString();
const inputStr:string=FS.readFileSync(“./input.txt”).toString();
常量inputWords=新数组();
const fileStream=FS.createWriteStream(“./output.txt”);
for(inputStr.trim().split(OS.EOL))的常量行)
{
push(新词(行));
}
函数排列(索引:编号)
{
指数=数学地板(指数);
如果(!(索引>=0&&indexpermute(index));
返回;
}
排列(指数+1);
}
排列(0);
需要注意的是,
word.generatePermutations
是一个非常密集的函数,通常需要几分钟(有时超过一小时)才能返回。我的问题是,它返回的数据应该立即写入输出文件,这样整个程序就不需要完成运行就可以读取结果。希望有人能理解这一切

为了澄清,在REPL中写入
WriteStream
的数据会立即写入文件,而在整个程序运行完成之前,我的程序中不会将任何数据写入文件。

请尝试以下软件包:

我认为你的问题是重复的

我会检查这些包,但您建议的线程与我的线程不同,因为他在关闭流后尝试刷新文件,而我希望在流处于活动状态时刷新到文件。可能是@CDspace的重复。我实际上决定使用文件描述符和
fs.write()
来解决此问题,但这并没有改变我原来的问题没有得到回答的事实。我特别想知道是否有办法让WriteStream在数据写入磁盘时将其数据同步到磁盘。这似乎在REPL中起作用,但在我的程序中不起作用。我将编辑原始问题。我这里有同样的问题。找到解决办法了吗?