在unsubscribe函数中异步处理资源

问题描述 投票:3回答:1

我想在一个observable的unsubscribe函数中异步处理一个资源。例如:

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

};

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

我该如何处理?

javascript rxjs rxjs6
1个回答
0
投票

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

我们看到unsubscribe可能会返回一个errorObject,这个Observable contract会被咳嗽和治疗,但是取消订阅功能并没有将它返回给消费者本身,因此没有机会等待它。

它似乎也是通过这种方式实现的。 unsubscribe说:

当观察者向Observable发出取消订阅通知时,Observable将尝试停止向观察者发出通知。但是,不能保证Observable在观察者发出取消订阅通知后不会向观察者发出通知。

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

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

编辑

在尝试了我之前的方法之后,我注意到在使用complete之后unsubscribe通知不会到达订阅者,所以这也不是一个选项。我认为此时此要求尚无解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.