Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
369 views
in Technique[技术] by (71.8m points)

ios - Use the 'asPromise ()' in the Observable RxSwift can be used in a PromiseKit Promise?

I write function '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()
                }
            }
    }
}}

but dispose is weird, I don't better idea. so If you have any better ideas, please let me know

thank you


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)

There is no need to capture the disposable at all. When the Observable completes it will automatically dispose of all the resources. Here is the proper implementation:

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)
                }
            }
        }
    }
}

Did you know that the Combine API already has a Promise like type built in?

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

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

2.1m questions

2.1m answers

60 comments

56.9k users

...