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

问题描述

我写函数'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 很奇怪,我不知道。 所以如果你有更好的想法,请告诉我

谢谢

解决方法

根本不需要捕获一次性用品。当 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)
        }
    }
}