2016-12-30 2 views
2

Я пытаюсь получить данные JSON от REST (swift 2.3) с помощью rxSwift и Alamofire. Это мой код:RxSwift: onDisposed активирован до возвращения данных Alamofire

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) 

onDisposed возвращают данные перед Alamofire.request возвращаемые данные (onNext, OnError, OnCompleted не возвращать данные). Как подождать ответа?

ответ

0

Попробуйте сохранить сильную ссылку на 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 должен жить дольше, чем ответ.

Надеюсь, это поможет.

+0

спасибо. Оно работает. –

Смежные вопросы