在Alamofire返回数据之前激活onDisposed

在Alamofire返回数据之前激活onDisposed

本文介绍了RxSwift:在Alamofire返回数据之前激活onDisposed的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用rxSwift和Alamofire从REST(swift 2.3)中获取JSON数据。这是我的代码:

I'm trying to get the JSON data from REST (swift 2.3) with rxSwift and Alamofire. This is my code:

  func getArticles(articlesReq: ArticlesReq) - > Observable < [Article] > {
      return Observable < [Article] > .create {
          observer in
              let request = Alamofire.request(.POST, apiPath, parameters: DataHelper().convertStringToDictionary(JSONString), encoding: .JSON)
                  .responseArray {
                      (response: Response < [Article], NSError > ) in
                          if let articlesArray = response.result.value {
                              observer.on(.Next(articlesArray))
                          }
                          observer.on(.Completed)
                  }
          return AnonymousDisposable {
              request.cancel()
          }

      }

  }

  getArticles(articlesReq).observeOn(MainScheduler.instance)
      .subscribe(
          onNext: {
              data in
              print(data)
          },
          onError: {
              error in
              print(error)
          },
          onCompleted: {
              print("Completed")
          },
          onDisposed: {
              print("Disposed")
          }
      ).addDisposableTo(db)

onAlposedfire.request返回数据之前的onDisposed返回数据(onNext,onError,onCompleted不返回数据) 。如何等待回应?

onDisposed return data before Alamofire.request return data (onNext, onError, onCompleted not return data ). How to wait for a response?

推荐答案

尝试像这样强烈引用 disposbag

let disposeBag = DisposeBag()

func setupRx() {

  getArticles(articlesReq).observeOn(MainScheduler.instance)
      .subscribe(onNext: {
          print("onNext")
        // ... use $0 parameter
      }, onError: {
          print("onError")
        // ... use $0 parameter
      }, onCompleted: {
          print("onCompelete")
      }, onDisposed: nil)
  .addDisposableTo(disposeBag)

}

您的 disposeBag 应该比响应寿命更长。

Your disposeBag should live longer than response.

希望这会有所帮助。

这篇关于RxSwift:在Alamofire返回数据之前激活onDisposed的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-28 18:52