stream.end()是否同步?

问题描述 投票:1回答:1

我有一个类,该类具有维护称为write_stream的实例变量。此write_stream变量将使用新的写入流进行更新,目前我正在执行以下操作:

const fs = require('fs');

class Test {

   constructor() {
      this.write_stream = null;
   }

   ...

   set_write_stream(new_file_path) {
      if (this.write_stream != null) {
         this.write_stream.end();
      }
      this.write_stream = fs.createWriteStream(new_file_path);
   }
}

这是否可以接受?有更好的方法吗? stream.end()是同步的,还是在继续进入fs.createWriteStream()之前需要等待某种承诺?

javascript node.js io fs
1个回答
2
投票

nodejs docswritable.end()进行了回调

您也可以像这样承诺并等待回调:

const p = new Promise(res => this.write_stream.end(res))
await p;

尽管,我认为您不应该等待第一个流完成才将其替换到对象上。这可能会导致出现争用情况,其中某些内容尝试写入已结束但尚未完全完成的流。

换句话说,如果某些事情在调用.end()之后尝试对.stream()进行处理,它将出错,因此您必须在调用.end()之后立即替换该流,以使其无缝。] >

© www.soinside.com 2019 - 2024. All rights reserved.