【发布时间】:2018-06-08 05:25:24
【问题描述】:
我想将 Completable 链接到可观察元素。调用 flatMap 后,onCompleted 和 onError 回调似乎不会在订阅时调用。
var user = PublishRelay<User>()
func fetchUserInformation(_ userId: String) -> Completable {
return Completable.create { observer in
apiService.fetchInformation(for: userId, completion: { response in
if let name = response?.name {
user.accept(User(name: name))
observer(.completed)
} else {
observer(.error(ServiceError.userInformation))
}
})
return Disposables.create()
}
}
login()
.flatMap{ userId in fetchUserInformation(userId) }
.subscribe(
onCompleted: {
print("Success!") // Not being called at all
},
onError: { error in
print(error) // Not being called at all
}
).disposed(by: disposeBag)
虽然 fetchUserInformation 和 observer(.completed) 被调用并且用户信息被成功获取,但我无法捕捉到 onCompleted em> 订阅时(仅当前面有 flatMap 时)。
有没有一种干净的方法来实现这一点?
已经在 flatMap 调用之后尝试了 .materialized() 以获得
Observable<Event<Never>>而不是一个
Observable<Never>它也不起作用。
【问题讨论】:
-
如果
Completable不符合您的需求,请不要使用...此外,不会调用onCompleted,因为当您的内部可观察 (fetchUserInformation) 完成时,这并没有完成您的外部可观察对象:在下一次登录值时,它将再次触发fetchUserInformation。
标签: ios swift observable rx-swift