Запрос RxAlamofire не запускается во второй раз, когда я вызываю функцию - PullRequest
0 голосов
/ 17 марта 2019

У меня есть функция, которая должна возвращать Observable.Когда я вызываю функцию в первый раз, все идет хорошо, и я получаю ожидаемый результат, но во второй раз, когда я хочу сделать тот же запрос с другими параметрами, функция автоматически возвращает тот же ответ, что и раньше, и это неуволить запросы на всех.Есть несколько вложенных запросов, потому что каждый новый зависит от результатов предыдущего.

Это выглядит примерно так:

func request1() -> Observable<String> {
    return RxAlamofire
            .requestString(.get, url)
            .map { (response, html) -> Result<String> in
                .....
                return newUrl
            }
}

private func request2(credentials: Credentials) -> Observable<String> {
   return request1()
            .flatMapLatest { (newUrl)

                return RxAlamofire
                    .requestString(.get, newUrl)
                    .flatMapLatest { (response, _) -> Observable<String> in

                        let params = ["username": credentials.username, "password": credentials.password]

                        return RxAlamofire
                            .requestString(.post, (response.url?.absoluteString)!, parameters: params)
                            .flatMapLatest { (response2,str) -> Observable<String> in

                                ... some code formating ...

                                return RxAlamofire
                                    .requestString(.post, actionUrl!, parameters: anotherParameters)
                                    .map { return result }
                        }
                }
        }
    }

, когда я звоню, это выглядит примерно так:

result = someObservable.flatMapLatest { return ScrapingService.request2(credentials: $0) }

когда я запускаю "someObservable", он запускает request2, как и ожидалось, но фактический запрос не выполняется.

В конце я делаю onNext для результата.

1 Ответ

0 голосов
/ 18 марта 2019

, когда я это называю, это выглядит примерно так:

result = someObservable.flatMapLatest { return ScrapingService.request2(credentials: $0) }

Вы не "называете" наблюдаемое здесь.Вы просто создаете это.Чтобы получить результаты из Обсерватории, вы должны подписаться на нее.

...