gpt4 book ai didi

javascript - 在取消订阅函数中异步处理资源

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:39:02 29 4
gpt4 key购买 nike

我想在可观察对象的 unsubscribe 函数中异步处理资源。例如:

// rxjs 6
let observable = Observable.create(sub => {
let resource = new Resource();
return {
async unsubscribe() {
await resource.dispose();
}
}

};

问题在于,因为 unsubscribe 函数不应该返回 Promise,所以没有任何东西等待它,所以 unsubscribe 函数将在资源完全处理之前“早点结束”。这可能会导致在处理资源时不应发生的行为。

我该如何处理?

最佳答案

没有提示in the RxJS source code Subscription.unsubscribe 的结果可用于等待异步代码执行。

我们看到 unsubscribe 可能会返回一个 errorObject 会被咳嗽和处理,但它不是由 unsubscribe 函数返回给消费者本身,所以没有机会等待那个。

它似乎也是通过设计以这种方式实现的。 Observable contract状态:

When an observer issues an Unsubscribe notification to an Observable, the Observable will attempt to stop issuing notifications to the observer. It is not guaranteed, however, that the Observable will issue no notifications to the observer after an observer issues it an Unsubscribe notification.

这表明,unsubscribe 通知不应该以任何方式保证 Observable 的完整性。

或者,complete 通知似乎是我们正在寻找的。从语义上看,它似乎符合要求,因为它表明 Observable 已达到其最终生命周期状态。

编辑

在尝试了我以前的方法后,我注意到在使用 unsubscribe 之后,complete 通知不会到达订阅者,因此这也不是一个选项。我认为目前还没有解决方案。

关于javascript - 在取消订阅函数中异步处理资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52368064/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com