我想在可观察对象的unsubscribe
函数中异步处理资源。例如:
// rxjs 6
let observable = Observable.create(sub => {
let resource = new Resource();
return {
async unsubscribe() {
await resource.dispose();
}
}
};
问题在于,由于不应将unsubscribe
函数返回一个Promise
,因此没有任何等待的结果,因此unsubscribe
函数将在资源之前“过早”已完全处置。这可能会导致在处置资源时不应该发生的行为。
我该如何处理?
答案 0 :(得分:0)
没有任何提示in the RxJS source code可以将Subscription.unsubscribe
的结果用于等待异步代码执行。
我们看到unsubscribe
可能会返回将被处理的errorObject
,但是unsubscribe函数不会将其返回给消费者本身,因此没有机会等待它。 / p>
它似乎也可以通过设计来实现。 Observable contract指出:
当观察者向观察者发出取消订阅通知时,观察者将尝试停止向观察者发出通知。但是,不能保证Observable在观察者发出取消订阅通知后不会向观察者发出任何通知。
这表明unsubscribe
通知不应以任何方式保证Observable的完整性。
或者,complete
通知似乎正是我们想要的。从语义上讲,它似乎符合要求,因为它表明Observable已达到其最终生命周期状态。
编辑
尝试了我以前的方法后,我注意到在使用complete
之后,unsubscribe
通知将不会到达订阅者,因此这也不是一种选择。我认为目前尚无解决方案。