我想在一个observable的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
,这个Observable contract会被咳嗽和治疗,但是取消订阅功能并没有将它返回给消费者本身,因此没有机会等待它。
它似乎也是通过这种方式实现的。 unsubscribe
说:
当观察者向Observable发出取消订阅通知时,Observable将尝试停止向观察者发出通知。但是,不能保证Observable在观察者发出取消订阅通知后不会向观察者发出通知。
这表明,qazxsw po通知不应该以任何方式保证Observable的完整性。
或者,complete
通知似乎是我们正在寻找的。从语义上讲,它似乎符合要求,因为它表明Observable已达到其最终生命周期状态。
编辑
在尝试了我之前的方法之后,我注意到在使用complete
之后unsubscribe
通知不会到达订阅者,所以这也不是一个选项。我认为此时此要求尚无解决方案。