gpt4 book ai didi

javascript - stream.end() 是同步的吗?

转载 作者:行者123 更新时间:2023-12-04 10:14:55 26 4
gpt4 key购买 nike

我有一个类,它维护一个名为 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 docswritable.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/

26 4 0