【问题标题】: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 很奇怪,我没有更好的主意。 所以如果你有更好的想法,请告诉我

谢谢

【问题讨论】:

    标签: ios swift rx-swift promisekit


    【解决方案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)
            }
        }
    }
    

    【讨论】:

    • 谢谢你丹尼尔!您的建议很有帮助。
    • 如果答案正确,您应该接受。
    猜你喜欢
    • 1970-01-01
    • 2021-01-04
    • 2019-03-20
    • 2017-07-29
    • 1970-01-01
    • 1970-01-01
    • 2019-07-10
    • 2020-05-22
    相关资源
    最近更新 更多