2017-12-13 4 views
3

비용이 많이 들기 때문에 일부 무한한 스트림을 게으른로드해야합니다. 그리고 같은 이유로 시작한 후에도 그들을 멈추고 싶지는 않습니다.구독을 취소하지 않는 공유 연산자

share 연산자가 있으면 모든 다운 스트림 구독자가 구독을 취소 한 경우에도 기본 스트림을 처음 구독했을 때 구독을 취소하지 않았다고 생각합니다.

은 지금 나는 게시하고, 괜찮아 작동 두 개의 서로 다른 라인에 연결 함께하고 있어요 그러나 다만 투박 보인다 아니라 매우 같은 rxjs :

또한
public data$(): Observable<any> { 
    if (this.lazyData$) { 
     return this.lazyData$; 
    } 

    this.lazyData$ = this.someDataProvider.data$() 
    .publishReplay(1); 

    this.lazyData$.connect(); 

    return this.lazyData$; 
} 

내가 그것을 마지막을 재생하려면 표시되는대로 새 가입자에게 메시지 :

+1

현재 'shareReplay'구현은 사용자가 수행 한 동작에 영향을줍니다. 소스가 완료되면 /는 구독을 취소합니다. https://github.com/ReactiveX/rxjs/pull/2910을 참조하십시오. – cartant

+0

아, 우리가 가서 고마워요. :) 그리고 링크도 고마워요. rxjs 5.5.5로 업데이트해야했지만 그렇지 않으면 방금 작업했습니다. 당신은 그것을 대답으로 두어 받아 들인 대답으로 표시 할 수 있어야합니다. – Sammi

답변

2

shareReplay 연산자가 RxJS version 5.4.0에 추가되었습니다. 그리고 version 5.5.0에서 bug was fixed으로 변경되어 구독자 수가 0으로 떨어지면 기록이 유지됩니다.

shareReplay은 소스가 완료되거나 오류가 발생했을 때만 소스에서 구독을 취소하므로 찾고있는 동작에 영향을줍니다. 공유 관찰 가능 항목에 대한 가입자 수가 0으로 떨어지면 공유 관찰 항목은 소스에 가입 된 채로 유지됩니다.

관련 문제