[英]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.