我是RxSwift的初学者,正在使用RxSwift+MVVM制作应用程序。
我有一个方法,它调用API并转换为RxCocoa。ViewModel类中的驱动程序如下。
func fetch() -> Driver<HomeViewEntity> {
apiUseCase.fetch(query: HomeViewQuery())
.map { data in
HomeViewEntity(userName: data.name,
emailAddress: data.email
}
.asDriver(onErrorRecover: { [weak self] error in
if let printableError = error as? PrintableError {
self?.errorMessageRelay.accept(AlertPayload(title: printableError.title, message: printableError.message))
}
return Driver.never()
})
}
现在,我想定期调用这个fetchListPlace()
方法,也就是在ViewController上进行轮询(例如,每5分钟一次(。
怎么做????
我认为interval
适合这种情况,但我无法获得实现映像。。。。
开始:
func example(_ fetcher: Fetcher) -> Driver<HomeViewEntity> {
Driver<Int>.interval(.seconds(5 * 60))
.flatMap { _ in fetcher.fetch() }
}
另请注意,
- 从恢复关闭中返回
Driver.never()
可能是个坏主意。首选Driver.empty()
- 我不喜欢把副作用放在恢复关闭的第一位。我认为最好让
fetch()
返回Driver<Result<HomeViewEntity, Error>>
,并将副作用移动到链的末端(在订阅或平面图中(