ios - RxSwift 在 Zip 运算符中配置可观察对象

标签 ios swift reactive-programming rx-swift

我遇到了 zip 运算符的问题。我打算使用 timer observable

var timer = Observable<Int>
        .interval(0.1, scheduler: MainScheduler.instance)
        .do(onNext:
            { num in
                if(num == 20)
                {
                    //Purpose of this timer is to show progress if second request takes too long
                    MessagesManager.show_progress()
                }
        })

let source = Observable .... //my observable of networking request

return Observable.zip(source, timer,
               resultSelector: { value1, value2 in

                // Here i want to cancel/dispose/stop timer observable
                return value1
           })
    .do(onNext:
        { item in
            MessagesManager.dismiss_progress()
    }, onError:
        { error in
            MessagesManager.dismiss_progress()
    })

我希望 zip 运算符在第一次调用 onComplete 时关闭第二个可观察对象,但计时器在网络请求完成后继续工作。我该如何解决这个问题并在 zip block 中/之后配置可观察的计时器?

最佳答案

使用take(1) 来限制预期元素的数量:

return Observable.zip(source, timer,
               resultSelector: { value1, value2 in
                return value1
           })
    .take(1)
    .do(onNext:
        { item in
            MessagesManager.dismiss_progress()
    }, onError:
        { error in
            MessagesManager.dismiss_progress()
    })

这样,在 source 发出第一个元素后,zip 将创建第一对项目。在您的 resultSelector 中,您从一对中选择第一个项目,然后 take(1) 将确保立即完成(然后处置)observable。

关于ios - RxSwift 在 Zip 运算符中配置可观察对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58901805/

相关文章:

ios - 在 objective-c 中仅附加一次字符串

ios - Combine 框架的 Never 类型的本体状态是什么?

java - freemarker生成的docx后缀的word文档在iphone上无法显示图片

java - RxJava 反跳操作符取决于消息

ios - 快速组合 : Unexpected backpressure behaviour with zip operator

rx-java - 实时计数 rx 中发出的元素

ios - 如何在 Firebase IOS 中正确链接不同的 Auth 帐户

ios - 使用 NSNumberFormatterStyle 创建(美国)电话号码样式

IOS X,Y 坐标来自图像

ios - 在 Swift 中使用 NSTimer 的几个小数槽的倒计时