RxJS Insight - ChoDragon9/posts GitHub Wiki
operatorλ₯Ό μ¬μ©νλ©΄ νμ λ°μ΄ν°λ λΆλ³ κ°μ²΄κ° λ§λ€μ΄ μ§λ??
μ¬κΈ° of operatorλ₯Ό ν΅ν΄ Observableλ₯Ό μμ±νμ΅λλ€.
const data$ = of({n: 1}, {n: 2}, {n: 3});
κ·Έλ¦¬κ³ μμ μ λ°ννλ ν¨μμ μ κ³±λ₯Ό νλ ν¨μλ₯Ό pipeλ₯Ό ν΅ν΄ λ°μμ΅λλ€.
const identity$ = data$.pipe(map(v => v));
const div$ = data$.pipe(
map((v) => {
v.n = v.n * v.n;
return v;
})
);
μ¬κΈ°μ μμλλ‘ μ€ννλ©΄ μ΄μ κ°μ κ²°κ³Όλ₯Ό μ»μ μ μμ΅λλ€. μμνλ―μ΄ μνλ λ°μ΄ν°λ₯Ό μ»μ μ μμμ΅λλ€.
data$.subscribe(console.log);
// output { n: 1 }
// output { n: 2 }
// output { n: 3 }
identity$.subscribe(console.log);
// output { n: 1 }
// output { n: 2 }
// output { n: 3 }
div$.subscribe(console.log);
// output { n: 1 }
// output { n: 4 }
// output { n: 9 }
λ§μ½μ μμλ₯Ό λ€μ§μ΄μ μ€ννλ©΄ μ΄λ»κ² λ κΉμ?? λΆλ³κ°μ²΄κ° μ μ§ λ κΉμ?? μμλ₯Ό λ³κ²½ν΄ 보λ λΆμν¨κ³Όκ° λ°μνλ κ²μ νμΈν μ μμμ΅λλ€.
div$.subscribe(console.log);
// output { n: 1 }
// output { n: 4 }
// output { n: 9 }
identity$.subscribe(console.log);
// output { n: 1 }
// output { n: 4 }
// output { n: 9 }
data$.subscribe(console.log);
// output { n: 1 }
// output { n: 4 }
// output { n: 9 }
λꡬλ data$
λ₯Ό ꡬλ
νμ λ λ³κ²½λ κ°μ΄ λμ€λ κ²μ μνμ§ μμ κ²μ
λλ€. μ¬κΈ°μ μ μ μλ κ²μ
operator
λ₯Ό μ¬μ©νλλΌλ λ΄λΆκ°μ 곡μ λ₯Ό νκ³ μλ€λ κ²μ
λλ€. μ¦, operator
μ λ±λ‘νλ ν¨μλ λͺ¨λ μμν¨μλ‘ μμ±μ ν΄μΌ ν©λλ€.
identity$
μ div$
μ λͺ¨λ μμν¨μλ₯Ό μ¬μ©ν λ€ κ²°κ³Όμ
λλ€.
const identity$ = data$.pipe(map(({n}) => ({n})));
const div$ = data$.pipe(map(({n}) => ({n: n * n})));
div$.subscribe(console.log);
// output { n: 1 }
// output { n: 4 }
// output { n: 9 }
identity$.subscribe(console.log);
// output { n: 1 }
// output { n: 2 }
// output { n: 3 }
data$.subscribe(console.log);
// output { n: 1 }
// output { n: 2 }
// output { n: 3 }
pipe μ€κ°μ μλ¬κ° λ°μνλ©΄ μ΄λ»κ² λμ§??
μμ ν ν¨μν©μ±μ μν΄ λͺ¨λλλ₯Ό μ¬μ©νλ λ°, Observableμ μλ¬κ° λ°μλλ©΄ μ΄λ»κ² μ²λ¦¬λλ μ§ μμ보기 μν΄ ν
μ€νΈλ₯Ό ν΄λ΄€λ€. μλ μ½λλ₯Ό 보면 μ μλμ§ μλ κ°μ²΄λ₯Ό μ κ·Όνκ² λμ΄ TypeError
κ° λ°μνκ² λμλ€.
const data$ = of({v: null}).pipe(
map(({v: {v}}) => v)
);
data$.subscribe(console.log);
// output: TypeError: Cannot destructure property `v` of 'undefined' or 'null'.
λ§μ½μ μ΅μ Έλ²μ error ν¨μλ₯Ό λ°μΌλ©΄ μ΄λ»κ² λ κΉ? λλκ²λ Throwλ‘ λμ Έμ§λ κ²μ λͺ¨λ error ν¨μμ λ€μ΄μ¨λ€. Throwλ₯Ό λ°μμν€μ§ μκ³ error ν¨μλ₯Ό ν΅ν΄ μ²λ¦¬λ₯Ό κ°λ₯νλλ‘ ν μ μλ€.
const data$ = of({v: null}).pipe(
map(({v: {v}}) => v)
);
const observer = {
next: console.log,
error: () => (console.log('Error!'))
};
data$.subscribe(observer);
// output: Error!