gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 11:25:58 25 4
gpt4 key购买 nike

我遇到了 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com