使用 RxAlamofire 创建 Observable 包含网络请求的结果

Posted

技术标签:

【中文标题】使用 RxAlamofire 创建 Observable 包含网络请求的结果【英文标题】:Using RxAlamofire to create Observable contain the result of network request 【发布时间】:2017-04-05 16:37:46 【问题描述】:

我正在尝试使用RxAlamofire 来包装网络请求结果。

我的目标是触发请求、处理 JSON 响应并创建包含网络操作成功或发生任何错误的 Observable。

在其他地方,我可以调用创建 Observable 的函数并订阅它,并通过错误消息通知用户它是成功还是失败。

我的实现如下:

func discoverMovieList(for url: String, withPagg page: Int) -> Observable<Any> 
        let requestUrl = "\(url)&page=\(page)"

        return RxAlamofire.json(.get, requestUrl)
            .map jsonResponse in
                    self.createOrUpdateMoviesList(from: JSON(jsonResponse))
                
    

我们如何更正代码以及如何从其他地方调用它以通知处理结果?

【问题讨论】:

您能否明确说明当前实现的问题是什么? 您好,感谢您的回复。当前的实现没有问题。我想问我们如何使用它来跟踪网络请求的结果。例如,仅当第一个请求完成时才执行其他请求 【参考方案1】:

Observable 定义多个生命周期回调,您使用subscribe 方法提供。在这种情况下,用法是这样的:

discoverMovieList(for: "http://some.url", withPagg: 2)
  .subscribe(
    onNext:  movies in
      uiElement.string = "Movie list received"
    ,
    onError:  error in
      uiElement.string = "Something went wrong"
    
  )
  .disposed(by: disposeBag)

disposeBag 用于保存订阅,所以当 disposeBag 被释放时,订阅被取消(在我们的例子中,网络调用将被中止)。

【讨论】:

谢谢。我的 self.createOrUpdateMoviesList(from: JSON(jsonResponse)) 仅从 jsonResponse 更新 coredata (它什么都不返回)我们如何链接响应。即更新核心数据完成后触发另一个请求?一开始可能没有使用地图?

以上是关于使用 RxAlamofire 创建 Observable 包含网络请求的结果的主要内容,如果未能解决你的问题,请参考以下文章

Swift 3、RxAlamofire 和映射到自定义对象

如何使用 RxAlamofire 下载图像

RxAlamofire 使用 json 正文进行 post call

如何在 swift4 中使用 Rxalamofire 发送 URL 请求

使用 RxAlamofire 限制同时下载

如何使用 RxAlamofire 取消先前的请求?