问题描述
我是RxSwift的初学者,并使用RxSwift + MVVM开发了一个应用程序。
我有一个方法可以调用API并在viewmodel类中转换为RxCocoa.Driver,如下所示。
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()
})
}
现在,我想在ViewController中定期(例如每5分钟一次)调用此fetchListPlace()
方法。
该怎么做??
在这种情况下,我认为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>>
并将副作用移到链的末尾(在订阅或flatMap中。)