Как гарантировать порядок выполнения с потоковым писателем Node? - PullRequest
0 голосов
/ 25 сентября 2019

Как я могу изменить этот код:

const fs = require('fs');

let list = ['a', 'b', 'c'];
list.forEach(x => {
  console.log('processing ' + x);
  let out_path = x + '.txt';
  let writeStream = fs.createWriteStream(out_path);
  writeStream.write('a lot of stuff will go here', 'utf8');
  writeStream.on('finish', () => {
    console.log(out_path + ' saved');
  });
  writeStream.end();
});

, чтобы получить это:

processing a
a.txt saved
processing b
b.txt saved
processing c
c.txt saved

вместо этого:

processing a
processing b
processing c
a.txt saved
b.txt saved
c.txt saved

?

Это прекрасно работает, если я строю объект в цикле forEach, а затем записываю каждый объект в файл, используя fs.writeFile ... но я не могу этого сделать, потому что я пишу огромное количестводанных (ГБ) и скоро достигнет предела кучи.

1 Ответ

0 голосов
/ 25 сентября 2019

Использовать асинхронное ожидание

(async () => {
  const fs = require('fs');

  let list = ['a', 'b', 'c'];
  for (let x of list) {
    console.log('processing ' + x);
    let out_path = x + '.txt';
    let writeStream = fs.createWriteStream(out_path);
    writeStream.write('a lot of stuff will go here', 'utf8');
    writeStream.end();
    await new Promise(resolve => {
      writeStream.on('finish', () => {
        console.log(out_path + ' saved');
        resolve();
      });
    })  
  }
})();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...