stopOn & startOn
두 번째 스트림이 조종하는 두 개의 게이트: stopOn은 트리거가 발화하면 체인을 닫고, startOn은 엽니다.
강의
푸시 체인에는 자연스러운 끝이 없습니다. 풀 파이프라인은 소비자가
묻기를 멈추면 멈추지만, 라이브 피드 — 소켓, 센서,
Stream.periodic — 는 무언가가 취소할 때까지
계속 생산합니다. 그걸 잊는 것이 전형적인 누수입니다: 화면은
폐기되었고, 위젯은 사라졌는데, 구독은 여전히 깨어 있고, 여전히
할당하고, 여전히 시체를 향해 setState를 호출합니다.
stopOn(trigger)은 종료를 "기억해서 취소해야 하는
변수"가 아니라 체인의 일부로 만듭니다. trigger의 첫
이벤트가 출력을 닫고 두 구독을 모두 취소합니다 —
소스의 것과 트리거의 것 모두. 트리거가 무엇을 실어 나르는지는 전혀
읽지 않고 발화했다는 사실만 보므로, 타입은
Stream<void>이고 어떤 스트림이든 쓸 수 있습니다.
startOn(trigger)은 거울상입니다: 트리거가 한 번
발화할 때까지 소스 이벤트는 버려지고, 그 후로는
영원히 통과합니다. "준비될 때까지 기다리는" 게이트입니다 — 세션이
로드되기 전의 탭에는 반응하지 마세요. 값을 앞에 덧붙이는
startWith와는 무관하다는
점에 유의하세요. 두 이름은 가깝게 붙어 있지만 상당히 다른 것을
뜻합니다.
…On 접미사는 "트리거 스트림이 조종한다"는 이벤트
레이어의 관례로,
sampleOn,
chunkOn과 공유합니다.
fxdart 이벤트 레이어, Rx의 takeUntil과
skipUntil을 따랐습니다 — 이름이 다른 이유는
Fx.takeUntil이 풀 쪽에서 이미 술어 기반
takeUntilInclusive를 뜻하기 때문입니다. 한 라이브러리
안에서 한 이름이 두 가지를 뜻할 수는 없습니다.
데모 1 · 끄는 스위치
데모 2 · 켜는 스위치
직접 해 보기
연습: 두 게이트로 만드는 세션 윈도.
FxSubscriptions — 정리의 나머지 절반: 여러 구독을 한 번에 취소 ·
sampleOn — 같은 트리거 관례, 멈추는 대신 읽기 위해 ·
race — 누가 먼저 말하는지가 결정하는 취소