【发布时间】:2018-08-09 18:48:07
【问题描述】:
在我的 Swift UIViewController 中,我尝试订阅变量类型的类成员,通过 flatMapLatest 调用运行它,然后在所有订阅者上执行 flatMapLatest 可观察对象中的 onCompleted() 调用。然而,虽然 onNext() 被调用,但 onCompleted() 永远不会被调用,我不知道为什么。
我的班级成员定义为:
private let privateVar = Variable<String>("")
在我的 viewDidLoad() 方法中,我设置了 observables:
let localVar = self.privateVar.asObservable().distinctUntilChanged()
localVar.subscribe(onNext: { [weak self] sent in print("first onNext called") })
.disposed(by: self.disposeBag)
let mappedVar = localVar.flatMapLatest { self.ajaxLoad(var1: $0) }.share()
mappedVar.subscribe(
onNext: { [weak self] queryRes in
print("onNext called!")
},
onCompleted: { [weak self] in
print("onCompleted called!")
}
)
.disposed(by: self.disposeBag)
还有我的 ajaxLoad 方法:
func ajaxLoad(var1 myVar: String) -> Observable<QueryResponse> {
return Observable.create { observable in
apollo.fetch(query: MyQuery()) { (result, _) in
observable.onNext(result?.data?.myQuery)
observable.onCompleted()
}
return Disposables.create()
}
}
我对 ReactiveX 还很陌生,所以我可能对 Rx 生命周期的实际情况有些模糊。为什么在 flatMapLatest 调用中可能会调用 onNext,而不是 onCompleted?任何帮助,将不胜感激。提前致谢!
【问题讨论】:
标签: ios swift rx-swift reactivex rx-cocoa