Я бы хотел связать завершаемый элемент с наблюдаемым элементом.После вызова 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 и наблюдатель (.completed) вызывается и пользовательская информация успешно выбирается, я не смогу поймать onCompleted при подписке (только если ему предшествует flatMap ).
Есть ли чистый способ добиться этого?
Уже пробовали .materialized () сразу после вызова flatMap , чтобы получить
Observable<Event<Never>>
вместо
Observable<Never>
Это тоже не работает.