如何保证 Node 的流编写器的执行顺序?

How to guarantee execution order with Node's stream writer?

如何更改此代码:

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 将每个对象写入文件,它工作正常......但我不能那样做,因为我正在写入大量数据 (GB),很快就会达到堆的限制。

使用异步等待

(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();
      });
    })  
  }
})();