Невозможно увидеть данные из вновь созданного файла, используя 'fs.createWriteStream' - PullRequest
0 голосов
/ 06 марта 2019

У меня проблемы с чтением данных из файла, созданного с помощью fs.createWriteStream.

Похоже, что stream.write исполняется в конце программы после чтения файла, а не когда он вызывается (что объясняет, почему в variable_3 на момент его вывода ничего нет).

Используемая функция следующая (упрощенная):

module.exports = async data1 => {
    console.log('start');
    try {
        const stream = fs.createWriteStream(filename_1, { flags: "a" });
        console.log('stream created');
        stream.write("some data", (err) => {
            if (err) {
                console.log(err.message);
            } else {
                console.log("data written");
            }
        });

        for (const variable_1 of object_1) {
            const variable_2 = await function2({
                // generates a buffer
            });
            stream.write(variable_2, (err) => {
                if (err) {
                    console.log(err.message);
                } else {
                    console.log("data written");
                }
            });
        }

        stream.end();
        console.log('stream ended');

        console.log('opening file');
        const variable_3 = fs.readFileSync(filename_1);
        console.log('file opened and read with data: ' + variable_3);
        return;
    } catch (error) {
        console.log(error);
    }
};
Output:
> start
> stream created
> stream ended
> opening file
> file opened and read with data: 
> data written
> data written

Однако, после запуска кода, когда я открываю filename_1 (через проводник), все данные присутствуют?!

1 Ответ

0 голосов
/ 07 марта 2019

В конце концов отсортировано.

Не понял, что функции потоков не возвращают обещание, поэтому мне пришлось возвращать обещание вручную.

Вот код, который был изменен:

module.exports = async data1 => {
    console.log('start');
    try {
        const stream = fs.createWriteStream(filename_1, { flags: "a" });
        console.log('stream created');
        stream.write("some data", (err) => {
            if (err) {
                console.log(err.message);
            } else {
                console.log("data written");
            }
        });

        for (const variable_1 of object_1) {
            const variable_2 = await function2({
                // generates a buffer
            });
            stream.write(variable_2, (err) => {
                if (err) {
                    console.log(err.message);
                } else {
                    console.log("data written");
                }
            });
        }

        stream.end();
        console.log('stream ended');

        console.log('opening file');
        const variable_3 = fs.readFileSync(filename_1);
        console.log('file opened and read with data: ' + variable_3);

        return new Promise(resolve => {
          stream.on('finish', () => {
              resolve('done');
              console.log("createNRRD is done");
          });
        });
    } catch (error) {
        console.log(error);
    }
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...