AsyncSubject

AsyncSubject는 소스 Observable로부터 배출된 마지막 값(만)을 배출하고 소스 Observable의 동작이 완료된 후에야 동작한다. (만약, 소스 Observable이 아무 값도 배출하지 않으면AsyncSubject역시 아무 값도 배출하지 않는다.)

즉 쉽게 말하자면 onCompleted를 하기전 이벤트만 배출이 된다는 것이다. onCompleted가 호출이 되지 않으면 배출이 되지 않는다.

io.reactivex.subjects.Subject<String> subject = AsyncSubject.create();

subject.subscribe( v -> System.out.println("Observer 1: " + v) ,
        Throwable::printStackTrace,
        () -> System.out.println("Observer 1 done!!")
        );

subject.onNext("Alpha");
subject.onNext("Beta");
subject.onNext("Gamma"); <-- 이 값만 배출이 될것이다. 
//subject.onComplete(); <-- onCompleted 호출 

subject.subscribe( v -> System.out.println("Observer 2: " + v) ,
        Throwable::printStackTrace,
        () -> System.out.println("Observer 2 done!!")
);

그리고 내부적으로 Observable에 대해서 takeLast(1).replay(1) 을 사용하고 있다는 점을 유의해야 한다.

이 Subject는 java 8 에서 CompletableFuture과 유사합니다. 계산을을 수행해서 완료를 관찰하면서 값을 얻는 형식입니다.

+ Recent posts