Цепные наблюдаемые (это сетевые запросы) - PullRequest
1 голос
/ 15 июня 2019

У меня есть сетевой запрос с именем login, который возвращает Observable<UserInfo>.Мне нужно сделать еще один вызов API из этого результата в зависимости от того, имеет ли число, возвращаемое из login, число> 1, в противном случае мне просто нужно перейти к другому контроллеру представления.Я пытаюсь использовать flatMapLatest, чтобы выполнить проверку для первого запроса login и сделать следующий сетевой вызов jobStates (который возвращает Observable<JobState>, но я не думаю, что я правильно их упорядочиваю.Есть идеи? Есть ли лучший / более простой способ сделать это?

Вот как это выглядит: enter image description here

1 Ответ

1 голос
/ 16 июня 2019

Я бы ожидал увидеть что-то вроде этого:

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)
}

Если у вас есть два разных возможных результата, вам нужно два разных подписчика.

...