Может кто-нибудь сказать мне, возможно ли создать отложенный завершаемый в операторе concat.
Я хочу получить сеанс и после этого загрузить пользователя с соответствующим идентификатором сеанса.
SessionAPI.post(email: email, password: password)
UserAPI.get(id: Session.load()!.userId)
До сих пор я использовал наблюдаемые с оператором flatMap.
Теперь я попытаюсь воспроизвести то же поведение с завершаемыми, у которых нет оператора flatMap.
Рабочий код с наблюдаемыми:
SessionAPI.post(email: email, password: password)
.flatMap { (_) -> Single<Any> in
return UserAPI.get(id: Session.load()!.userId)
}
Новый рабочий код с завершаемыми
SessionAPI.post(email: email, password: password)
.concat(Completable.deferred { UserAPI.get(id: Session.load()!.userId) } )
Теперь я хочу создать расширение для этого отложенного завершаемого типа, например:
SessionAPI.post(email: email, password: password)
.concatDeferred(UserAPI.get(id: Session.load()!.userId))
Текущее расширение:
extension PrimitiveSequenceType where Self.Element == Never, Self.Trait == RxSwift.CompletableTrait {
func concatDeferred(_ second: RxSwift.Completable) -> RxSwift.Completable {
return Completable.deferred { () -> PrimitiveSequence<CompletableTrait, Never> in
return second
}
}
}
Проблема: Session.load ()! в UserAPI.get загружается и аварийно завершает работу до завершения SessionAPI.post.
У кого-нибудь появилась идея запустить это расширение?
Спасибо!