Поток записи не добавляет полные данные в массив. Почему некоторые токены не записываются, если они присутствуют в массиве? - PullRequest
0 голосов
/ 13 июля 2020

В следующей функции initiateWriteStream он пытается записать все токены внутри массива с именем tokensToStore в файл. Здесь используется общий массив array для записи

initiateWriteStream() {
    const writeStreamNotifier = new EventEmitter();

    writeStreamNotifier.on("start", () => {
        let proceedWithNextWrite = true;
        let tokensToStore = this.tokensToStore;
        const stream = fs.createWriteStream("my-file.token", {
            flags: "a"
        });

        function store() {
            do {
                const token = tokensToStore.pop() || "";
                if (token && token.trim().length > 0) {
                    proceedWithNextWrite = stream.write(`${token.trim()}${os.EOL}`);
                }
            } while (tokensToStore.length > 0 && proceedWithNextWrite);
            if (tokensToStore.length > 0) {
                stream.once("drain", store);
            }
        }
        store();
        this.tokensToStore = tokensToStore;
        stream.end();
        writeStreamNotifier.emit("end");
    });

    return writeStreamNotifier;

}

const writeStream = wtm.initiateWriteStream();
writeStream.emit("start");

Я наблюдаю, что некоторые из более мелких токенов, таких как Insurance, не записываются в файл. Что я делаю неправильно? Я не могу понять причину этого.

Непосредственно перед вызовом store в al oop, если я сделаю require("fs").writeFileSync("tp2.json", JSON.stringify(tokensToStore));, я могу увидеть все токены, но my-file.token не имеет всех токенов. В чем может быть причина этого?

...