AsyncSubject는 Event를 전달하는 시점에 차이가 있다.
다른 서브젝트들은 서브젝트로 이벤트가 전달되면 즉시 구독자에게 전달한다.
반면 AsyncSubject는 서브젝트로 CompletedEvent가 전달되기 전까지 어떠한 이벤트도 전달하지 않는다.
CompletedEvent가 전달되면 그 시점에 가장 최근에 저장된NextEvent 하나를 구독자에게 전달한다.
let subject = AsyncSubject<Int>()
subject.subscribe{ print($0)}
.disposed(by: bag)
subject.onNext(1)
아직 CompletedEvent가 전달되지 않았기 때문에 NextEvent가 구독자에게 전달되지 않는다.
let subject = AsyncSubject<Int>()
subject.subscribe{ print($0)}
.disposed(by: bag)
subject.onNext(1)
subject.onCompleted()
//next(1)
//completed
이렇게 CompletedEvent가 전달되면 가장 최근에 전달된 NextEvent를 전달하고 CompletedEvent를 전달한다.
CompletedEvent가 전달되면 그 시점에 가장 최근에 저장된NextEvent 하나를 구독자에게 전달한다.
만약 AsyncSubject로 전달된 NextEvent가 없다면 그냥 CompletedEvent만 전달하고 종료된다.
만약 ErrorEvent가 전달된다면 NextEvent는 전달되지 않고 ErrorEvent만 전달되고 종료된다.