RxFuture
一个临时的解决方案
这是什么?
一个库,提供由 RxSwift 支持的 Future/Promise 模式 API。
为什么我们需要这个?
首先,Future/Promise 模式适合返回异步任务的单个结果。
func doSomething() -> Future<E>
Future/Promise 模式还可以使用 RxSwift 的 API 来实现。使用 Observable 或一些 PrimitiveSequence。
在这种情况下,问题在于:首先,Observable 并不知道会有多少次订阅。所以,Observable 总是应该是共享序列。如果不是,使用 Observable 包装的任务将逐个执行。其次,由 Observable 包装的任务不知道何时开始。它依赖于订阅。
第二种情况依赖于 RxSwift。几乎所有的 RxSwift 中的 Observables 都是冷流 Observable。
func doSomething() -> Observable<E>
这个函数的名称是 "do something",但实际上,"something" 不会直到订阅才会执行。
下面的名称可能比上面的更好。
func taskToDoSomething() -> Observable<E>
基本来说,Future 将立即运行包装的任务。因此,我创建了一个类似 Future 的对象,利用 RxSwift 实现。
Single<E>
有什么不同?
与 RxFuture 与 Single 不同。我们可以说 RxFuture
与 Combine.Future
运行类似。
RxFuture
和 Combine.Future
会立即运行它们的任务,并且它们会缓存结果,直到被释放。