在 Observable RxSwift 中使用 'asPromise()' 可以在 PromiseKit Promise 中使用吗?

Posted

技术标签:

【中文标题】在 Observable RxSwift 中使用 \'asPromise()\' 可以在 PromiseKit Promise 中使用吗?【英文标题】:Use the 'asPromise ()' in the Observable RxSwift can be used in a PromiseKit Promise?在 Observable RxSwift 中使用 'asPromise()' 可以在 PromiseKit Promise 中使用吗? 【发布时间】:2021-01-06 05:58:53 【问题描述】:

我写函数'asPromise()'

extension PrimitiveSequence 
public func asPromise() -> Promise<Element> 
    var disposed: Disposable? = nil
    return Promise<Element>  seal in
        disposed = self.asObservable()
            .subscribe  event in
                switch event 
                case .next(let element):
                    seal.fulfill(element)
                case .error(let error):
                    seal.reject(error)
                case .completed:
                    disposed?.dispose()
                
            
    

但是 dispose 很奇怪,我没有更好的主意。 所以如果你有更好的想法,请告诉我

谢谢

【问题讨论】:

【参考方案1】:

根本不需要捕获一次性用品。当 Observable 完成时,它会自动释放所有资源。这是正确的实现:

extension PrimitiveSequence where Trait == SingleTrait  // will only work properly for Singles
    public func asPromise() -> Promise<Element> 
        Promise<Element>  seal in
            _ = subscribe  event in
                switch event 
                case let .success(element):
                    seal.fulfill(element)
                case let .failure(error):
                    seal.reject(error)
                
            
        
    

您知道 Combine API 已经内置了类似 Promise 的类型吗?

extension PrimitiveSequence where Trait == SingleTrait 
    public func asFuture() -> Future<Element, Error> 
        Future  fulfill in
            _ = self.subscribe(fulfill)
        
    

【讨论】:

谢谢你丹尼尔!您的建议很有帮助。 如果答案正确,您应该接受。

以上是关于在 Observable RxSwift 中使用 'asPromise()' 可以在 PromiseKit Promise 中使用吗?的主要内容,如果未能解决你的问题,请参考以下文章

在 RxSwift 中,我如何对 observable 未发送任何事件进行单元测试?

RxSwift 在 Zip 运算符中处理 observable

如何从使用 RxSwift 返回 Observable 的服务中获取值

使用 Observable 绑定 BehaviorRelay - RxSwift

如何在 RxSwift 中组合多个 Observable

RxSwift - Observable 移除使用过的元素