如何使用 RxSwift 和 alamofire 获得嵌套 api 调用的响应?

Posted

技术标签:

【中文标题】如何使用 RxSwift 和 alamofire 获得嵌套 api 调用的响应?【英文标题】:How to get response of a nested api call using RxSwift and alamofire? 【发布时间】:2018-02-27 06:39:48 【问题描述】:

在这里,我得到了来自 alamofire api cal 的响应,因此我需要调用另一个 api 调用。我想获得第二个 api 调用响应。谁能建议我解决这个问题的解决方案。请。

func origin() -> Observable<String> 
return Alamofire.request("httpbin.org/get").rx.responseJSON() 

func otherApiCall(with origin: String) -> Observable<YourType> 
// Other api call using origin
return Alamofire...........

然后

origin()
.flatMap origin in 
    otherApiCall(with: origin)  

.subscribe(onNext:  response in 

)
.disposed(by: disposeBag)

【问题讨论】:

“我收到回复了” - 在哪里? 从第一个 api 调用开始。我会得到一个响应,通过使用我想调用第二个 api 调用的响应 这是对您的提示,您应该发布一些代码。 这里我放了一些示例代码。请检查一下 【参考方案1】:

您的代码解释不多,但根据我的理解,如果您想使用其他 api 的响应调用 api,而不是下面的代码应该可以工作。

func firstRequest() -> Observable<firstRequestResponseType> 
    return firstRequest


firstRequest
.flatMap  (firstRequestResponseType) ->  Observable<secondRequestResponseType>
    return secondRequest

.map  (secondRequestResponseType)
 //you can user second request’s response here

.subscribe()

【讨论】:

实际上编译器并没有等待第二次调用响应的响应 @gunjan 在两个 API 请求都完成后,您将在地图块中到达 实际上第二个 api 调用取决于第一个 api 调用响应的值。在这里,我需要使用满足条件的那些第一个响应值来调用第二个 api 调用。所以第二个 api 调用将被调用任意次数。我需要以循环方式获取响应以附加第一个响应..你能帮我吗 您可以在 flatMap 块中使用第一个请求的响应在上面的示例中,或者如果您想多次共享第一个请求的响应,您可以使用 RxSwift 的 share() 方法

以上是关于如何使用 RxSwift 和 alamofire 获得嵌套 api 调用的响应?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 RxSwift 和 alamofire 获得嵌套 api 调用的响应?

Alamofire/RxSwift 如何在状态码 401 上自动刷新令牌和重试请求

如何使用 RxSwift 和 Alamofire 库调用来自另一个 API 的响应的 API?

使用 RxSwift 将 Alamofire 请求绑定到表视图

结合 Alamofire 和 RxSwift

RxSwift+Alamofire 自定义映射器错误处理