我有一个类,该类具有维护称为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()
之前需要等待某种承诺?
nodejs docs说writable.end()
进行了回调
您也可以像这样承诺并等待回调:
const p = new Promise(res => this.write_stream.end(res))
await p;
尽管,我认为您不应该等待第一个流完成才将其替换到对象上。这可能会导致出现争用情况,其中某些内容尝试写入已结束但尚未完全完成的流。
换句话说,如果某些事情在调用.end()之后尝试对.stream()进行处理,它将出错,因此您必须在调用.end()之后立即替换该流,以使其无缝。] >