pipe1
값에 함수 하나를 적용합니다. 값이 Future라면 먼저 await합니다.
FutureOr<R> pipe1<A, R>(FutureOr<A> a, FutureOr<R> Function(A a) f)
강의
pipe1은 pipe가 내부적으로 사용하는 한 단계짜리
빌딩 블록입니다. a에 f를 적용하되,
a가 Future라면 먼저 await합니다.
a가 평범한 값이면 f가 즉시 실행되고
pipe1은 f가 반환한 값을 그대로 —
Future로 감싸지 않고 동기적으로 — 돌려줍니다.
핵심은 f 자신은 넘겨받은 값이 상류의 동기 작업에서 왔는지
비동기 작업에서 왔는지 알 필요도, 신경 쓸 필요도 없다는 점입니다 —
pipe1이 그 차이를 대신 흡수해 줍니다. 값이
때로는 Future가 되는 상황(예: 앞선 비동기 단계의
결과)에서 다음 단계를 어느 쪽이든 똑같은 모습으로 쓰고 싶을 때
유용합니다.
한 단계만 처리하므로, 짧은 체인을 만들려면 pipe1 호출을
중첩하면 되고, 단계가 두어 개를 넘어가면
List<Function>을 받는 pipe를 쓰는 편이
낫습니다.
데모 1 · 평범한 값(Future가 아닌 값)
Future가 끼어들지 않으면 pipe1은
f(a)를 그대로 호출하고 평범한 값을 반환합니다.
데모 2 · Future를 먼저 await하기
a가 Future라면 pipe1은
f를 호출하기 전에 await합니다 — 이런 호출을 몇 개
이어 붙이면 비동기 단계를 하나씩 조합할 수 있습니다.
직접 해 보기
연습: pipe1로 지연된 이름을 인사말로 바꿔 보세요.