peek, whenComplete & handleError
부수 효과, 에러마다 계속하기, finalize 훅 — .stream으로 체인을 벗어나지 않고.
강의
풀 레이어의 peek는 값이
pull될 때 관찰합니다. 이벤트 레이어의
peek는 푸시 스트림에서 같은 개념에 같은 단어입니다:
부수 효과를 실행하고, 이벤트는 그대로 통과시킵니다. 선택적
onError / onDone 훅이 나머지 두 알림을
덮습니다. 콜백이 throw하면 에러 이벤트가 되고 체인은 계속됩니다
— peek가 실패한 그 이벤트는 다시 내보내지지 않습니다. fxdart
이벤트 레이어, Rx의 tap /
doOn*을 따랐습니다.
handleError는 에러마다 계속하는 형태입니다:
맞는 에러(test를 생략하면 모든 에러)가
onError를 실행하고 스트림은 계속 갑니다. 소스를
취소하고 갈아타는
onErrorResume이
아닙니다. 잡음을 기록하거나 삼킬 때는 handleError를, 연결을
버릴 때는 onErrorResume를 쓰세요. whenComplete는
Rx의 finalize입니다: 콜백은 완료에서, 에러에서,
또는 취소에서 정확히 한 번 실행됩니다. throw해도
체인은 여전히 정리됩니다.
체인은 이제 endWith, ifEmpty,
uniq, takeRight,
takeWhile에서도 .stream으로 떨어지지
않습니다 — 이제 FxEvents 메서드입니다.
uniq는 전역입니다(인접이 아님): 본 값의 집합이
한없이 자라므로, 오래 사는 피드에 묶이지 않은
uniq는 메모리 누수입니다. 연속 반복만 걸러야 할
때는 uniqAdjacent를 쓰세요.
fxdart 이벤트 레이어, Rx의 tap,
갈아타지 않는 모양의 catchError, 그리고
finalize를 따랐습니다. 이미 같은 뜻을 가진 곳에서는
풀 레이어 이름이 이깁니다: peek이지
tap이 아니고, takeRight이지
takeLast가 아니고, uniq이지
distinct가 아닙니다.
데모 1 · 부수 효과로서의 peek
데모 2 · endWith, 그리고 ifEmpty
직접 해 보기
연습: 완료에서, 그리고 취소에서 whenComplete.
peek — 값이 pull될 때 관찰하는 풀 레이어의 원본 ·
onErrorResume — 버리고 갈아타기; handleError는 계속하는 형태 ·
tap — 스트림이 아니라 값 하나의 데이터-퍼스트 부수 효과