2017-06-01 195 views
0

這是我的非反應式代碼,工作得很好。RXAlamofire不返回數據(錯誤與否)

FUNC getLatestHtml2(){

Alamofire.request("https://www.everfest.com/fest300").responseString { response in 
    print("\(response.result.isSuccess)") 
    if let html = response.result.value { 
     self.parseHTML(html: html) 
    } 
} 

}

然而,當我使其反應使用此代碼。

func getLatestHtml1() -> Observable<String> { 

     return Observable<String>.create { (observer) -> Disposable in 
      let request = Alamofire 
       .request("https://www.everfest.com/fest300") 
       .responseString { response in 
        print(response.result.value) 
        observer.onNext(response.result.value!) 
        observer.onCompleted() 

      } 
      return Disposables.create { request.cancel() } 


     } 
    } 

我在打印語句中沒有得到任何數據。我甚至用RxAlamofire,我覺得是這個代碼的正確方法,它有錯誤檢查:

func getLatestHtml() -> Observable<String?> { 
     return RxAlamofire 

      .requestData(.get,"https://web.archive.org/web/20170429080421/https://www.everfest.com/fest300") 
      .debug() 
      .catchError { error in 
       print(error) 
       return Observable.never() 
      } 
      .map { (response, value) in 
       print(response.statusCode) 
       guard response.statusCode == 200 else { return nil } 
       print(value) 
       return String(data: value, encoding: String.Encoding.utf8) 
      } 
      .asObservable() 



    } 

其產生的任何數據或錯誤的任何地方。我需要知道我的語法是錯誤的還是我關於反應式編程的想法是錯誤的。

我把它稱爲.getLatestHTMLX()。謝謝 !

回答

0

Observable's是懶惰的,除非他們被監視,否則他們不會做任何工作(並且一般沒有人在觀察就會停止工作)。這意味着您必須訂閱observable才能開始發射值。

此外,除非您明確共享observable,否則它將爲每個用戶啓動一個新請求。

+0

非常感謝。一旦我將它綁定到一個視圖,它就可以正常工作。感謝您的解釋。 –