链接可观察对象(即网络请求)

时间:2019-06-15 16:35:36

标签: swift rx-swift

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

是这样的: enter image description here

1 个答案:

答案 0 :(得分: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)
}

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