在取消订阅函数中异步处置资源

Gre*_*Ros 5 javascript rxjs rxjs6

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

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

};
Run Code Online (Sandbox Code Playgroud)

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

我该如何处理这个问题?

ggr*_*nig 0

RxJS 源代码中没有暗示其结果Subscription.unsubscribe可用于等待异步代码执行。

我们看到unsubscribe可能会返回一个errorObject会被咳嗽和处理的值,但取消订阅函数不会将其返回给消费者本身,因此没有机会等待它。

它似乎也是通过设计来实现的。Observable合约规定:

当观察者向 Observable 发出取消订阅通知时,Observable 将尝试停止向观察者发出通知。然而,不保证在观察者向其发出取消订阅通知后,Observable 不会向观察者发出任何通知。

这表明,unsubscribe通知不应以任何方式保证可观察量的完整性。

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

编辑

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