【问题标题】:Chaining observables (that are network requests)链接可观察对象(即网络请求)
【发布时间】:2019-06-15 16:35:36
【问题描述】:

我有一个名为 login 的网络请求,它返回一个 Observable<UserInfo>。我需要根据从login 返回的数据的计数是否 > 1 从该结果中进行另一个 API 调用,否则,我只需要转到不同的视图控制器。我正在尝试使用flatMapLatest 来检查第一个请求login 并进行下一个网络调用jobStates(它返回一个Observable<JobState>,但我认为我没有正确安排它们。有什么想法吗?有没有更好/更简单的方法来做到这一点?

它是这样的:

【问题讨论】:

    标签: swift rx-swift


    【解决方案1】:

    我希望看到这样的东西:

    func login() {
        let loginResult = networkService
            .login(login: usernameTextField.text!, password: passwordTextField.text!)
            .share()
    
        loginResult
            .filter { $0.count > 1 }
            .subscribe(onNext: { userInfo in
                // stop here and go to a different view with userInfo data
            })
            .disposed(by: disposeBag)
    
        let networkService = self.networkService // so you don't have to capture self below
        loginResult
            .filter { $0.count <= 1 }
            .flatMapLatest { networkService.jobStates(locationId: $0.locationId) }
            .subscribe(
                onNext: { data in
                    // do whatever with data from second request
            },
                onError: { error in
                    // if either request errors, you will end up here.
    
            })
            .disposed(by: disposeBag)
    }
    

    当您有两种不同的可能结果时,您需要两个不同的订阅。

    【讨论】:

    • 该解决方案效果很好!我正在我的应用程序的另一个领域做类似的事情,我希望得到一些关于如何清理它的建议。如果你有兴趣看看,我在这里发布了问题:stackoverflow.com/questions/56623583/…
    猜你喜欢
    • 2015-01-12
    • 1970-01-01
    • 2021-08-26
    • 2018-10-25
    • 2018-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多