gpt4 book ai didi

swift - Rx swift : onDisposed activated before Alamofire return data

转载 作者:搜寻专家 更新时间:2023-10-31 22:58:16 25 4
gpt4 key购买 nike

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

  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 不返回数据)。如何等待回应?

最佳答案

尝试像这样保持对 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 应该比响应更长寿。

希望这可能有所帮助。

关于swift - Rx swift : onDisposed activated before Alamofire return data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41395928/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com