我有一个类,它维护一个名为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 docs说 writable.end()
接受回调
您还可以像这样 promise 并等待回调:
const p = new Promise(res => this.write_stream.end(res))
await p;
尽管如此,我认为您不应该等待第一个流完成后再将其替换到对象上。这可能会导致竞争条件,即某些东西试图写入已经结束但未完全完成的流。
换句话说,如果在您调用 .end() 之后尝试对流进行 .write() 操作,则会出错,因此您必须在调用 .end() 之后立即替换该流,以使其无缝。
关于javascript - Stream.end() 是同步的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61110941/