繁体   English   中英

stream.end() 是否同步?

[英]Is stream.end() synchronous?

我有一个 class ,它维护一个名为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()是同步的,还是我需要等待某种 promise 才能继续fs.createWriteStream()

nodejs 文档writable.end()需要一个回调

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

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

虽然,我认为您不应该等待第一个 stream 完成后再将其替换到 object 上。 这可能会导致竞争条件,其中某些内容试图写入已经结束但未完全完成的 stream。

换句话说,如果在你 call.end() 之后尝试 to.write() stream 它将出错,因此你必须在 call.end() 之后立即替换 stream 以使其无缝。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM