combine & CombineSpec
"누가 트리거하는가"와 "누가 이미 말했어야 하는가"를 위한 하나의 결합자 — 그리고 zipAll과 withLatestFromAll.
강의
combineLatest,
withLatestFrom,
zip의 차이는 누가
방출을 일으킬 수 있는지, 그리고 모든 쪽이 이미 말했는지를
요구하는지입니다. combine이 통합 형태입니다:
CombineSpec의 리스트, 각각은
source와 플래그 둘. 최상위 함수이지
FxEvents.combine이 아닙니다 — Dart는 다른
파일에서 FxEvents에 정적 멤버를 추가할 수
없습니다.
causesEmit: true (기본값)는 이 소스의 이벤트가
출력을 만들 수 있다는 뜻입니다. 모든
requireFirst 스펙이 값을 가진 뒤에.
모두 true인 스펙은
FxEvents.combineLatestAll입니다.
causesEmit: false는 이 소스가 컨텍스트뿐이라는
뜻입니다: 칸은 갱신하지만 스스로는 방출을 일으키지 않습니다
— 그것이 withLatestFrom입니다.
requireFirst: true (기본값)는 이 소스가 최소 한
번 값을 만들기 전까지 모든 방출을 보류하고,
false는 말할 때까지 칸을 null로
둡니다. 결과는 모든 소스가 닫혔을 때 닫힙니다.
옆에 결합자가 둘 더 있습니다.
FxEvents<Stream<T>>의
zipAll은 아우터가 완료될 때까지 모든 내부
스트림을 모은 뒤 인덱스로 짝짓습니다 — 그때까지 내부는
구독조차 되지 않습니다.
withLatestFromAll은 N항
withLatestFrom입니다: 소스 이벤트마다 다른
모든 쪽의 최신과 결합하고, 다른 쪽이 모두 말하기 전에 온
소스 이벤트는 버립니다. fxdart 이벤트 레이어, Rx의
combineLatest / withLatestFrom /
zipAll을 따랐습니다.
데모 1 · 양쪽이 트리거한다
데모 2 · 컨텍스트만 — causesEmit: false
직접 해 보기
연습: 스트림의 스트림에 대한 zipAll, 그리고 소스에 대한 withLatestFromAll.
combineLatest — 양쪽이 트리거, 모두 true인 CombineSpec ·
withLatestFrom — 한쪽만, causesEmit: false 스펙 ·
waitAll — zip, combineLatestAll, concat