RxSwift-如何调用定期返回Driver的方法?

问题描述

我是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中。)