waitAll, zip 및 관련 함수
여러 스트림을 하나로 합치기: 전부 기다리거나, 인덱스로 짝짓거나, 차례로 재생하거나, 경주시키거나.
강의
FxEvents.waitAll(sources)는 스트림을 위한
Future.wait입니다. 모든 소스가 닫히고 나면 정확히
하나의 이벤트 — 각 소스의 마지막 값을
소스 순서대로 담은 리스트 — 를 내보내고, 자신도 닫습니다. 대시보드
사례가 그것입니다: 패널 셋이 각자 로드되고, 가장 느린 하나가
들어오면 화면이 그려집니다. 한 번도 내보내지 않고 닫힌 소스가
있으면 보고할 완전한 결과가 없으므로, 아무것도 내보내지 않습니다.
FxEvents.zip은 소스를 인덱스로
짝짓습니다: 모든 소스의 1번째끼리, 그다음 모든 소스의 2번째끼리,
이렇게요. 앞서가는 소스는 가장 느린 소스가 따라올 때까지 버퍼에
담기고, 닫힌 소스의 버퍼가 비는 순간 결과도 닫힙니다 — 더 이상 짝을
만들 수 없으니까요. zipWith는 두 소스 형태이고,
리스트 기반 정적 메서드와 달리 서로 다른 타입을 짝지을 수
있습니다.
zip과
combineLatest는 나란히
두고 볼 가치가 있습니다. "두 스트림 합치기"의 두 절반인데 사람들이
끊임없이 잘못 고르거든요. zip은 위치로 짝짓습니다:
A의 3번째는 아무리 오래 걸려도 언제나 B의 3번째를 만납니다.
combineLatest는 시간으로 짝짓습니다: 어느 쪽
이벤트든 상대가 지금 쥐고 있는 값과 함께 다시 나가므로, 한 소스가
여러 출력에 등장하고 다른 소스는 하나에도 못 낄 수 있습니다.
combineLatestAll이 그 N항 형태입니다.
나머지는 합치기가 아니라 차례 세우기입니다.
FxEvents.concat은 각 소스를 완료까지 재생한 뒤 다음을
시작합니다 — followedBy가 그 두 소스 형태이고, Dart
자신의 Iterable.followedBy에서 이름을 땄습니다.
mergeWith와 raceWith는
FxEvents.merge,
FxEvents.race의 인스턴스
형태입니다. fxdart 이벤트 레이어, Rx의 forkJoin,
zip, combineLatestList,
concat을 따랐습니다.
데모 1 · 모든 패널 기다리기
데모 2 · 위치로, 또는 시간으로
직접 해 보기
연습: 차례 세우기 — concat, followedBy, raceWith, mergeWith.
combineLatest — 시간 기준 짝짓기, UI 상태에는 보통 이쪽 ·
race — 먼저 말하는 소스가 이기고 나머지는 취소 ·
zip — Iterable을 인덱스로 짝짓는 풀 레이어의 원본