这是我的非反应性代码,运行得很好。
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()。谢谢!
发布于 2017-06-01 23:48:34
可观察的人是懒惰的,除非他们被监视,否则他们不会做任何工作(而且当没有人观看时,他们通常会立即停止工作。)这意味着您必须订阅一个可观察的,以便它开始释放值。
另外,除非您显式地共享可观察到的内容,否则它将为每个订阅者启动一个新的请求。
https://stackoverflow.com/questions/44317905
复制相似问题