RxJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВред рднрд╛рдЧ 2. рд╕рдВрдЪрд╛рд▓рдХ рдФрд░ рдкрд╛рдЗрдк



рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рдореЗрдВ, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреНрдпрд╛ рдзрд╛рд░рд╛рдПрдБ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреНрдпрд╛ рдЦрд╛рддреА рд╣реИрдВред рдирдП рднрд╛рдЧ рдореЗрдВ, рд╣рдо рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдкреНрд░рд╡рд╛рд╣ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕реЗ рддрд░реАрдХреЗ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рд╣реИрдВ, рдСрдкрд░реЗрдЯрд░, рдкрд╛рдЗрдк рдХреНрдпрд╛ рд╣реИрдВ рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдВрдЧреЗред

рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ "RxJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдореВрд▓ рддрддреНрд╡":



RxJS рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рдореГрджреНрдз рдПрдкреАрдЖрдИ рд╣реИ ред рдкреНрд░рд▓реЗрдЦрди рд╕реМ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддрд╛ рд╣реИред рдЙрдиреНрд╣реЗрдВ рдереЛрдбрд╝рд╛ рд╕рд╛ рдЬрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╕рд░рд▓ рдЖрд╡реЗрджрди рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдХреЛрдб рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рд╕рдорд╛рди рдХрд╛рд░реНрдп, рдЬреЛ рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рдкреНрд░рддреАрдд рд╣реЛрддреЗ рдереЗ рдФрд░ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рдереА, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рд┐рдЬреНрдо рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рддреЛ рдПрдХ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рд╕рдорд╛рдзрд╛рди рд╣реИред рд▓реЗрдХрд┐рди рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рдкреНрд░рд╡рд╛рд╣ рдХреЛ рд░реЗрдЦрд╛рдВрдХрди рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдмрдирд╛рдиреЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХреЛрдВ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдзрд╛рдЧреЗ рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡


рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╡рд╛рд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдореИрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ рдЕрдкрдирд╛рдИ рдЧрдИ рдзрд╛рд░рдгрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рдкрд┐рдЫрд▓реЗ рд▓реЗрдЦ рд╕реЗ рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдпрд╛рдж рдХрд░реЗрдВ:

const observable = new Observable((observer) => { observer.next(1); observer.next(2); observer.complete(); }); 

рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдЪрд┐рддреНрд░рдордп рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХреИрд╕рд╛ рджрд┐рдЦреЗрдЧрд╛:



рдкреНрд░рд╡рд╛рд╣ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдзрд╛рд░рд╛ рдХрд┐рд╕реА рднреА рдорд╛рди рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреА рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рд╕рд░реНрдХрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рд▓рд╛рдЗрди рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдПрдХ рд╕реАрдзреА рд░реЗрдЦрд╛ рдзрд╛рд░рд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рд╣реИред рддреНрд░реБрдЯрд┐ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░рддреАрдХ - "├Ч" рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

 const observable = new Observable((observer) => { observer.error(); }); 



рдПрдХ рдкрдВрдХреНрддрд┐ рдзрд╛рд░рд╛


рдореЗрд░реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ, рдореБрдЭреЗ рд╢рд╛рдпрдж рд╣реА рдХрднреА рд╕реАрдзреЗ рддреМрд░ рдкрд░ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрд╡рд▓реЛрдХрди рдЙрджрд╛рд╣рд░рдг рдмрдирд╛рдиреЗ рдкрдбрд╝рддреЗ рдереЗред рдзрд╛рдЧреЗ рдмрдирд╛рдиреЗ рдХреА рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдзрд┐рдпрд╛рдБ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА RxJS рдореЗрдВ рд╣реИрдВред 1 рдФрд░ 2 рдорд╛рди рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рдзрд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИ:

 const observable = of(1, 2); 

рд╡рд┐рдзрд┐ рдХрд┐рд╕реА рднреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддреА рд╣реИ рдФрд░ рд╡реЗрдзрд╢рд╛рд▓рд╛ рдХреЗ рд╕рдорд╛рдкреНрдд рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреА рд╣реИред рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреВрд░реНрдг рдХрд░реЗрдЧрд╛ рдФрд░ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛:



рдпрджрд┐ рдЖрдк рдПрдХ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд░реВрдк рдореЗрдВ рд╕рд░рдгреА рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рд╡рд┐рдзрд┐ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд┐рдзрд┐ рд╕реЗ рдХрд┐рд╕реА рднреА рдЪрд▓рдиреЗ рдпреЛрдЧреНрдп рд╡рд╕реНрддреБ (рд╕рд░рдгреА, рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЖрджрд┐) рдпрд╛ рд╡рд╛рджреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдФрд░ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕реНрдЯреНрд░реАрдо рдкрд░ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдзрд╛рд░рд╛ рдХреНрдпрд╛ рд╣реЛрдЧреА:

 const observable = from('abc'); 



рдФрд░ рдЗрд╕рд▓рд┐рдП, рдЖрдк рдПрдХ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рд╡рд╛рджрд╛ рд▓рдкреЗрдЯ рд╕рдХрддреЗ рд╣реИрдВ:

 const promise = new Promise((resolve, reject) => { resolve(1); }); const observable = from(promise); 



рдиреЛрдЯ: рдЕрдХреНрд╕рд░ рдзрд╛рдЧреЗ рдХреА рддреБрд▓рдирд╛ рд╡рд╛рджрд╛ рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдЙрдирдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдЪреАрдЬ рд╣реИ - рдкрд░рд┐рд╡рд░реНрддрди рдлреИрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдзрдХреНрдХрд╛ рд░рдгрдиреАрддрд┐ ред рдмрд╛рдХреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдЕрд▓рдЧ рд╕рдВрд╕реНрдерд╛рдПрдВ рд╣реИрдВред рд╡рд╛рджрд╛ рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрд╣ рдХреЗрд╡рд▓ рд╕рдорд╛рдзрд╛рди рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдЕрд░реНрдерд╛рддред рдХреЗрд╡рд▓ рджреЛ рд░рд╛рдЬреНрдп рд╣реИрдВред рдПрдХ рдзрд╛рд░рд╛ рдХрдИ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреА рд╣реИ, рдФрд░ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреА рд╣реИред

рдХреНрдпрд╛ рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд▓реЗрдЦ рд╕реЗ рдЕрдВрддрд░рд╛рд▓ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдпрд╛рдж рд╣реИ? рдпрд╣ рд╕реНрдЯреНрд░реАрдо рдПрдХ рдЯрд╛рдЗрдорд░ рд╣реИ рдЬреЛ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рдХреНрд╖рдг рд╕реЗ рд╕реЗрдХрдВрдб рдореЗрдВ рд╕рдордп рдХреА рдЧрдгрдирд╛ рдХрд░рддрд╛ рд╣реИред

 const timer = new Observable(observer => { let counter = 0; const intervalId = setInterval(() => { observer.next(counter++); }, 1000); return () => { clearInterval(intervalId); } }); 

рдпрд╣рд╛рдБ рдЖрдк рдПрдХ рд╣реА рдЪреАрдЬрд╝ рдХреЛ рдПрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 const timer = interval(1000); 



рдФрд░ рдЕрдВрдд рдореЗрдВ, рдПрдХ рд╡рд┐рдзрд┐ рдЬреЛ рдЖрдкрдХреЛ DOM рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдП рдШрдЯрдирд╛рдУрдВ рдХреА рдПрдХ рдзрд╛рд░рд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИ:

 const observable = fromEvent(domElementRef, 'keyup'); 

рдорд╛рдиреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ, рдпрд╣ рд╕реНрдЯреНрд░реАрдо рдХреАрдк рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдФрд░ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░реЗрдЧрд╛ред

рдкрд╛рдЗрдк рдФрд░ рдСрдкрд░реЗрдЯрд░


рдкрд╛рдЗрдк рдПрдХ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдХрдХреНрд╖рд╛ рд╡рд┐рдзрд┐ рд╣реИ рдЬрд┐рд╕реЗ 5.5 рд╕рдВрд╕реНрдХрд░рдг рдореЗрдВ RxJS рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдорд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкрд╛рдЗрдк рдПрдХ рдпреВрдирд┐рдбрд╛рдпрд░реЗрдХреНрд╢рдирд▓ рдЪреИрдирд▓ рд╣реИ рдЬреЛ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЗрдВрдЯрд░рдХрдиреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИред рдСрдкрд░реЗрдЯрд░ рд╕реНрд╡рдпрдВ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╕рд╛рдорд╛рдиреНрдп рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдПрдХ рдзрд╛рд░рд╛ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╡реЗ рдорд╛рди рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрдЧреЗ рдкрд╛рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╛ рд╡реЗ рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рди рдХреЛ рдЫреЛрдбрд╝ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ рдпрджрд┐ рд╡реЗ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред

рдЖрдЗрдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рджреЗрдЦреЗрдВред рдорд╛рдирдЪрд┐рддреНрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдзрд╛рд░рд╛ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдорд╛рди рдХреЛ 2 рд╕реЗ рдЧреБрдгрд╛ рдХрд░реЗрдВ:

 of(1,2,3).pipe( map(value => value * 2) ).subscribe({ next: console.log }); 

рдорд╛рдирдЪрд┐рддреНрд░ рдСрдкрд░реЗрдЯрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдЯреНрд░реАрдо рдХреНрдпрд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдорд╛рдирдЪрд┐рддреНрд░ рд╡рд┐рд╡рд░рдг рдХреЗ рдмрд╛рдж:



рдлрд┐рд▓реНрдЯрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХрдерди рдРрд░реЗ рдХреНрд▓рд╛рд╕ рдореЗрдВ рдлрд┐рд▓реНрдЯрд░ рдлрд╝рдВрдХреНрд╢рди рдХреА рддрд░рд╣ рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд╡рд┐рдзрд┐ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддреА рд╣реИ, рдЬреЛ рдПрдХ рд╕реНрдерд┐рддрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреА рд╣реИред рдпрджрд┐ рдзрд╛рд░рд╛ рд╕реЗ рдореВрд▓реНрдп рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 of(1, 2, 3).pipe( //     filter(value => value % 2 !== 0), map(value = value * 2) ).subscribe({ next: console.log }); 

рдФрд░ рдЗрд╕ рддрд░рд╣ рд╣рдорд╛рд░реА рдзрд╛рд░рд╛ рдХреА рдкреВрд░реА рдпреЛрдЬрдирд╛ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рдмрд╛рдж:



рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рдмрд╛рдж:



рдиреЛрдЯ: рдкрд╛рдЗрдк! == рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВред рдкрд╛рдЗрдк рд╡рд┐рдзрд┐ рдкреНрд░рд╡рд╛рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдШреЛрд╖рдгрд╛ рдХрд░рддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╕рджрд╕реНрдпрддрд╛ рдирд╣реАрдВ рджреЗрддреА рд╣реИред рдЬрдм рддрдХ рдЖрдк рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рддрдм рддрдХ рдЖрдкрдХреА рд╕реНрдЯреНрд░реАрдо рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░реЗрдЧреАред

рд╣рдо рдПрдХ рдЖрд╡реЗрджрди рд▓рд┐рдЦ рд░рд╣реЗ рд╣реИрдВ


рдЕрдм рдЬрдм рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдкрд╛рдЗрдк рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрднреНрдпрд╛рд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдиреАрдЪреЗ рдЙрддрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рдПрдХ рд╕рд░рд▓ рдХрд╛рд░реНрдп рдХрд░реЗрдЧрд╛: рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рд╕реНрд╡рд╛рдореА рдХреЗ рдЙрдкрдирд╛рдо рджреНрд╡рд╛рд░рд╛ рдЦреБрд▓реЗ рдЬреАрдердм рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВред

рдХреБрдЫ рдЖрд╡рд╢реНрдпрдХрддрд╛рдПрдБ рд╣реЛрдВрдЧреА:

  • рдпрджрд┐ рдХреЛрдИ рдЗрдирдкреБрдЯ рдореЗрдВ рджрд░реНрдЬ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ 3 рд╕реЗ рдХрдо рдЕрдХреНрд╖рд░ рд╣реИрдВ, рддреЛ рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рди рдХрд░реЗрдВ;
  • рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рд┐рддреНрд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдкреАрдЖрдИ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ 700 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА (рдкрд░рд╛рдЬрдп) рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ;

рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП, рд╣рдо github API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред рдореИрдВ рдЦреБрдж рдХреЛ рд╕реНрдЯреИрдХрдмреНрд▓рд┐рдЯреНрдЬрд╝ рдкрд░ рдЙрджрд╛рд╣рд░рдг рдЪрд▓рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ ред рд╡рд╣рд╛рдБ рдореИрдВрдиреЗ рддреИрдпрд╛рд░ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рдпрди рдХрд┐рдпрд╛ред рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рд▓рд┐рдВрдХ рджрд┐рдП рдЧрдП рд╣реИрдВред

рдЪрд▓рд┐рдП html рдорд╛рд░реНрдХрдЕрдк рд╕реЗ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рдЖрдЗрдП рдЗрдирдкреБрдЯ рдФрд░ рдЙрд▓ рддрддреНрд╡реЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

 <input type="text"> <ul></ul> 

рдлрд┐рд░ js рдпрд╛ ts рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд╣рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд░реНрддрдорд╛рди рддрддреНрд╡реЛрдВ рдХреЗ рд▓рд┐рдВрдХ рдорд┐рд▓рддреЗ рд╣реИрдВ:

 const input = document.querySelector('input'); const ul = document.querySelector('ul'); 

рд╣рдореЗрдВ рдПрдХ рдРрд╕реА рд╡рд┐рдзрд┐ рдХреА рднреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ github API рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗред рдиреАрдЪреЗ getUsersRepsFromAPI рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рд╣реИ, рдЬреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдЙрдкрдирд╛рдо рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рд╕рд╛рде рдореЗрдВ рд╕рдлрд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рддрд╛ рд╣реИ:

 const getUsersRepsFromAPI = (username) => { const url = `https://api.github.com/users/${ username }/repos`; return fetch(url) .then(response => { if(response.ok) { return response.json(); } throw new Error(''); }); } 

рдЕрдЧрд▓рд╛, рд╣рдо рдПрдХ рд╡рд┐рдзрд┐ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рдЬреЛ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдирд╛рдо рд╕реВрдЪреАрдмрджреНрдз рдХрд░реЗрдЧреА:

 const recordRepsToList = (reps) => { for (let i = 0; i < reps.length; i++) { //    ,    if (!ul.children[i]) { const newEl = document.createElement('li'); ul.appendChild(newEl); } //      const li = ul.children[i]; li.innerHTML = reps[i].name; } //    while (ul.children.length > reps.length) { ul.removeChild(ul.lastChild); } } 

рддреИрдпрд╛рд░рд┐рдпрд╛рдВ рдкреВрд░реА рд╣реИрдВред рдпрд╣ рдХрд╛рд░реНрд░рд╡рд╛рдИ рдореЗрдВ RxJS рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рд╣рдореЗрдВ рдЕрдкрдиреЗ рдЗрдирдкреБрдЯ рдХреА рдХреАрдк рдИрд╡реЗрдВрдЯ рдХреЛ рд╕реБрдирдирд╛ рд╣реЛрдЧрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдпрд╣ рд╕рдордЭрдирд╛ рдЪрд╛рд╣рд┐рдП рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдореЗрдВ, рд╣рдо рдкреНрд░рд╡рд╛рд╣ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, RxJS рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рд╕рдорд╛рди рд╡рд┐рдХрд▓реНрдк рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдКрдкрд░ рдмрддрд╛рдИ рдЧрдпреА рд╡рд┐рдзрд┐ рд╕реЗ рдпрд╛рдж рд░рдЦреЗрдВред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

 const keyUp = fromEvent(input, 'keyup'); keyUp.subscribe({ next: console.log }); 

рдЕрдм рд╣рдорд╛рд░реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЛ рдПрдХ рдзрд╛рд░рд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреНрдпрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХреАрдмреЛрд░реНрдб рджреЗрдЦреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛-рджрд░реНрдЬ рдореВрд▓реНрдп рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдпрд╣ рд╡рд╣ рдЬрдЧрд╣ рд╣реИ рдЬрд╣рд╛рдВ рдкрд╛рдЗрдк рд╡рд┐рдзрд┐ рдФрд░ рдорд╛рдирдЪрд┐рддреНрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛рдо рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:

 fromEvent(input, 'keyup').pipe( map(event => event.target.value) ).subscribe({ next: console.log }); 

рд╣рдо рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЙрд╕ рдХреНрд╡реЗрд░реА рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВрдЧреЗ рдЬрдм рдкреНрд░рд╡рд┐рд╖реНрдЯ рдореВрд▓реНрдп рдореЗрдВ рджреЛ рд╕реЗ рдЕрдзрд┐рдХ рдЕрдХреНрд╖рд░ рд╣реЛрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдлрд╝рд┐рд▓реНрдЯрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 fromEvent(input, 'keyup').pipe( map(event => event.target.value), filter(value => value.length > 2) ) 

рд╣рдо рдкрд╣рд▓реА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╕реЗ рдирд┐рдкрдЯрддреЗ рд╣реИрдВред рд╣рдо рджреВрд╕рд░реЗ рдкрд░ рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВред рд╣рдореЗрдВ рдмрд╣рд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред RxJS рдореЗрдВ рдПрдХ рдбрд┐рдмреЗрдЯрдЯрд╛рдЗрдо рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рджреМрд░рд╛рди рдореВрд▓реНрдп рдкрд╛рд╕ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЖрдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдкреНрд░рддреНрдпреЗрдХ рдирдпрд╛ рдорд╛рди рдЯрд╛рдЗрдорд░ рдХреЛ рд░реАрд╕реЗрдЯ рдХрд░реЗрдЧрд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдЙрдЯрдкреБрдЯ рдкрд░ рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж 700 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдмреАрдд рдЪреБрдХреЗ рд╣реИрдВред

 fromEvent(input, 'keyup').pipe( debounceTime(700), map(event => event.target.value), filter(value => value.length > 2) ) 

рдпрд╣рд╛рдБ рд╣рдорд╛рд░реА рдзрд╛рд░рд╛ рдмрд╣реБрд░реВрдкрд┐рдпреЛрдВ рдХреЗ рдмрд┐рдирд╛ рдХреИрд╕реА рджрд┐рдЦ рд╕рдХрддреА рд╣реИ:



рдФрд░ рдЗрд╕ рдХрдерди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╣реА рдзрд╛рд░рд╛ рдХреИрд╕реЗ рдирд┐рдХрд▓реЗрдЧреА:



рдбрд┐рдмреЗрдЯрдЯрд╛рдЗрдо рдХреЗ рд╕рд╛рде, рд╣рдореЗрдВ API рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рдХрдо рд╣реЛрдЧреА, рдЬреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЛ рд▓реЛрдб рдХрд░реЗрдЧрд╛ред

рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрдХреВрд▓рди рдХреЗ рд▓рд┐рдП, рдореИрдВ рдПрдХ рдЕрдиреНрдп рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ - рд╡рд┐рд╢рд┐рд╖реНрдЯ-рдкрд░рд┐рд╡рд░реНрддрд┐рддред рдпрд╣ рддрд░реАрдХрд╛ рд╣рдореЗрдВ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕реЗ рдмрдЪрд╛рдПрдЧрд╛ред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдирд╛ рдХрд╛рдо рджрд┐рдЦрд╛рдирд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╣реИ:

 from('aaabccc').pipe( distinctUntilChanged() ) 

рдмрд┐рдирд╛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдкрд░рд┐рд╡рд░реНрддрди



рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рд╕рд╛рде:



рдбреЗрдмреНрдпреВ рдЯрд╛рдЗрдордЯрд╛рдЗрдо рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЗ рддреБрд░рдВрдд рдмрд╛рдж рдЗрд╕ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдХреЛ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЕрдЧрд░ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдирдпрд╛ рдорд╛рди рдкрд┐рдЫрд▓реЗ рдПрдХ рдХреЗ рд╕рд╛рде рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдПрдкреАрдЖрдИ рддрдХ рдирд╣реАрдВ рдкрд╣реБрдВрдЪреЗрдВрдЧреЗред рдПрдХ рд╕рдорд╛рди рд╕реНрдерд┐рддрд┐ рддрдм рд╣реЛ рд╕рдХрддреА рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдиреЗ рдирдП рд╡рд░реНрдг рджрд░реНрдЬ рдХрд┐рдП рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рдлрд┐рд░ рд╕реЗ рдорд┐рдЯрд╛ рджрд┐рдпрд╛ рд╣реИред рдЪреВрдВрдХрд┐ рд╣рдордиреЗ рджреЗрд░реА рд▓рд╛рдЧреВ рдХреА рд╣реИ, рдХреЗрд╡рд▓ рдЕрдВрддрд┐рдо рдорд╛рди рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдЖрдПрдЧрд╛, рдЬрд┐рд╕рдХрд╛ рдЙрддреНрддрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реИред

рд╕рд░реНрд╡рд░ рдкрд░ рдЬрд╛рдПрдВ


рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдм рд╣рдо рдЕрдиреБрд░реЛрдз рдХреЗ рддрд░реНрдХ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рд╡рд░реНрдгрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬрдмрдХрд┐ рд╣рдо рдХреЗрд╡рд▓ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдиреНрдп рдорд╛рдирдЪрд┐рддреНрд░ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ getUsersRepsFromAPI рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдореЗрдВ, рд╣рдо рдЕрдкрдиреЗ рд╡рд╛рджреЗ рдХреЗ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ:

 /*  !     RxJS    promise,      */ fromEvent(input, 'keyup').pipe( debounceTime(700), map(event => event.target.value), filter(val => val.length > 2), distinctUntilChanged(), map(value => getUsersRepsFromAPI(value)) ).subscribe({ next: promise => promise.then(reps => recordRepsToList(reps)) }); 

рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдордиреЗ рд╡рд╣ рд╕рдм рдХреБрдЫ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдЬреЛ рд╣рдо рдЪрд╛рд╣рддреЗ рдереЗред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдПрдХ рдмрдбрд╝реА рдЦрд╛рдореА рд╣реИ: рдЗрд╕рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╛рджрд╛ рдорд┐рд▓рддрд╛ рд╣реИ рдФрд░ рдЗрд╕ рдмрд╛рдд рдХрд╛ рдХреЛрдИ рдЕрдВрджрд╛рдЬрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИред

рдмреЗрд╢рдХ, рд╣рдо рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ рд╡рд╛рджреЗ рдкрд░ рдкрдХрдбрд╝ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рд╡рдЬрд╣ рд╕реЗ, рд╣рдорд╛рд░рд╛ рдХреЛрдб рдЕрдзрд┐рдХ рд╕реЗ рдЕрдзрд┐рдХ "рдХреЙрд▓рдмреИрдХ рдирд░рдХ" рдЬреИрд╕рд╛ рджрд┐рдЦрдиреЗ рд▓рдЧреЗрдЧрд╛ред рдпрджрд┐ рдЕрдЪрд╛рдирдХ рд╣рдореЗрдВ рдПрдХ рдФрд░ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдХреЛрдб рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдмрдврд╝ рдЬрд╛рдПрдЧреАред

рдиреЛрдЯ: RxJS рдХреЛрдб рдореЗрдВ рд╡рд╛рджреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдВрдЯреАрдкреИрдЯрд░реНрди рдорд╛рдирд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрд╡рд▓реЛрдХрди рдХреЗ рдореБрдХрд╛рдмрд▓реЗ рд╡рд╛рджрд╛ рдореЗрдВ рдХрдИ рдиреБрдХрд╕рд╛рди рд╣реИрдВред рдпрд╣ рдкреВрд░реНрд╡рд╡рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рддреЛ рдЕрд╡рд▓реЛрдХрди рдХрд░реЗрдВред рд╡рд╣реА рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреНрд▓рд╛рд╕ рдХреА рдЯреЙрдкреНрд░реЛрдорд╛рдЗрдЬ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЧреВ рдХреА рдЧрдИ рдереА рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рд╣рдо рдПрдХ рд╕реНрдЯреНрд░реАрдо рдкрд░ рд╡рд╛рджреЗ рдХреЛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдзрд┐ рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд┐рдзрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЕрддрд┐рд░рд┐рдХреНрдд рдХреЙрд▓ рд╕реЗ рднрд░рд╛ рд╣реИ, рдФрд░ рдХреЛрдб рдХреА рд╡реГрджреНрдзрд┐ рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХреЛ рднреА рдЬрдиреНрдо рджреЗрдЧреАред

рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдорд░реНрдЬ рдореИрдк рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 fromEvent(input, 'keyup').pipe( debounceTime(700), map(event => event.target.value), filter(val => val.length > 2), distinctUntilChanged(), mergeMap(value => from(getUsersRepsFromAPI(value))) ).subscribe({ next: reps => recordRepsToList(reps), error: console.log }) 

рдЕрдм рд╣рдореЗрдВ рд╡рд╛рджрд╛ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рддрд░реНрдХ рд▓рд┐рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╡рд┐рдзрд┐ рд╕реЗ рдПрдХ рд╡рд╛рджрд╛ рд╕реНрдЯреНрд░реАрдо рдХрд┐рдпрд╛, рдФрд░ рдорд░реНрдЬрдкреИрдк рдСрдкрд░реЗрдЯрд░ рдиреЗ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ред рдпрджрд┐ рд╡рд╛рджрд╛ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рд╕рдорд╛рдкреНрдд рд╡рд╕реНрддреБ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧреАред рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рддреНрд░реБрдЯрд┐ рдкрджреНрдзрддрд┐ рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рд╣рдорд╛рд░рд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХрдВрд╕реЛрд▓ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрддреНрдкрд╛рджрди рдХрд░реЗрдЧрд╛ред

рдорд░реНрдЬрдкреЗрдЬ рдСрдкрд░реЗрдЯрд░ рдЙрди рдСрдкрд░реЗрдЯрд░реЛрдВ рд╕реЗ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИ, рдЬрд┐рдирдХреЗ рд╕рд╛рде рд╣рдордиреЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдерд╛; рдпрд╣ рддрдерд╛рдХрдерд┐рдд рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рд╡реЗрдзрд╢рд╛рд▓рд╛рдУрдВ рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ , рдЬрд┐рд╕рдХреА рдЪрд░реНрдЪрд╛ рдореИрдВ рдЕрдЧрд▓реЗ рд▓реЗрдЦ рдореЗрдВ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди, рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣реВрдВрдЧрд╛ рдХрд┐ рдорд░реНрдЬ рдореИрдк рд╡рд┐рдзрд┐ рд╕реНрд╡рдпрдВ рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреА рд╣реИред

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


рдпрджрд┐ рд╣рдорд╛рд░реЗ рдзрд╛рдЧреЗ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдорд┐рд▓рддреА рд╣реИ, рддреЛ рдпрд╣ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдФрд░ рдЕрдЧрд░ рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж рдЖрд╡реЗрджрди рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╣рдореЗрдВ рдХреЛрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░рд╛ рдзрд╛рдЧрд╛ рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛ рд╣реИред

рдпрд╣рд╛рдБ рдкрдХрдбрд╝рдиреЗ рд╡рд╛рд▓рд╛ рдСрдкрд░реЗрдЯрд░ рд╣рдорд╛рд░реА рдорджрдж рдХрд░реЗрдЧрд╛ред catchError рдХреЛ рддрдм рд╣реА рдЙрдард╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЖрдкрдХреЛ рдЗрд╕реЗ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ, рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рдорд╛рди рдХреЛ рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдХрд╛рд░рдг рдирд╣реАрдВ рд╣реЛрдЧрд╛ред

 fromEvent(input, 'keyup').pipe( debounceTime(700), map(event => event.target.value), filter(val => val.length > 2), distinctUntilChanged(), mergeMap(value => from(getUsersRepsFromAPI(value))), catchError(err => of([])) ).subscribe({ next: reps => recordRepsToList(reps), error: console.log }) 

рд╣рдо рдХреИрдЪ рдПрд░рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░реАрдо рд▓реМрдЯрд╛рддреЗ рд╣реИрдВред рдЕрдм, рдЬрдм рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕реВрдЪреА рдХреЛ рд╕рд╛рдл рдХрд░ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рдлрд┐рд░ рдкреНрд░рд╡рд╛рд╣ рдлрд┐рд░ рд╕реЗ рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ catchError рд╣рдорд╛рд░реА рдореВрд▓ рдзрд╛рд░рд╛ рдХреЛ рдПрдХ рдирдП рдХреЗ рд╕рд╛рде рдмрджрд▓ рджреЗрддреА рд╣реИред рдФрд░ рддрдм рд╣рдорд╛рд░рд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЗрд╡рд▓ рдЙрд╕рдХреА рд╕реБрдирддрд╛ рд╣реИред рдЬрдм рдзрд╛рд░рд╛ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░рддреА рд╣реИ, рддреЛ рдкреВрд░реА рд╡рд┐рдзрд┐ рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рд╣рдорд╛рд░реЗ рдореВрд▓ рдзрд╛рдЧреЗ рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдорд░реНрдЬрдкреЗрдЬ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдЕрдВрджрд░ рд╕реЗ рдереНрд░реЗрдб рдкрд░ рд╕реЗ рдХреИрдЪ рдСрдкрд░реЗрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВред

 fromEvent(input, 'keyup').pipe( debounceTime(700), map(event => event.target.value), filter(val => val.length > 2), distinctUntilChanged(), mergeMap(value => { return from(getUsersRepsFromAPI(value)).pipe( catchError(err => of([])) ) }) ).subscribe({ next: reps => recordRepsToList(reps), error: console.log }) 

рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реА рдореВрд▓ рдзрд╛рд░рд╛ рдХреБрдЫ рднреА рдиреЛрдЯрд┐рд╕ рдирд╣реАрдВ рдХрд░реЗрдЧреАред рддреНрд░реБрдЯрд┐ рдХреЗ рдмрдЬрд╛рдп, рдЗрд╕реЗ рдПрдХ рдЦрд╛рд▓реА рд╕рд░рдгреА рдорд┐рд▓реЗрдЧреАред

рдирд┐рд╖реНрдХрд░реНрд╖


рд╣рдордиреЗ рдЖрдЦрд┐рд░рдХрд╛рд░ рдЕрднреНрдпрд╛рд╕ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рджреЗрдЦрд╛ рдХрд┐ рдкрд╛рдЗрдк рдФрд░ рдСрдкрд░реЗрдЯрд░ рдХреНрдпрд╛ рд╣реИрдВред рд╣рдордиреЗ рдпрд╣ рджреЗрдЦрд╛ рдХрд┐ рд░рд┐рдЪ рдПрдкреАрдЖрдИ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдХреИрд╕реЗ рдХрдо рдХрд┐рдпрд╛ рдЬрд╛рдП рдЬреЛ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рд╣рдореЗрдВ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдмреЗрд╢рдХ, рд╣рдорд╛рд░рд╛ рдЖрд╡реЗрджрди рд╕рдорд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдЖ рд╣реИ, рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рд╣рдо рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдХреИрд╕реЗ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╣рдорд╛рд░реЗ рдЖрд╡реЗрджрди рдХреЗ рдФрд░ рдЕрдзрд┐рдХ рдЯреНрд░реИрдлрд╝рд┐рдХ рдФрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдорд╛рд░реЗ http рдЕрдиреБрд░реЛрдз рдХреЛ рдХреИрд╕реЗ рд░рджреНрдж рдХрд░рдирд╛ рд╣реИред рдФрд░ рддрд╛рдХрд┐ рдЖрдк рдЕрдВрддрд░ рджреЗрдЦ рд╕рдХреЗрдВ, рдореИрдВрдиреЗ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджрд┐рдпрд╛, рдЖрдк рдЗрд╕реЗ рдпрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд▓рд┐рдВрдХ рдкрд░ рдЖрдкрдХреЛ рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдкреВрд░рд╛ рдХреЛрдб рдорд┐рд▓реЗрдЧрд╛ред рд╕рд░реНрдХрд┐рдЯ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ RxJS рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЗрд╕ рд▓реЗрдЦ рдиреЗ рдЖрдкрдХреЛ рдпрд╣ рд╕рдордЭрдиреЗ рдореЗрдВ рдорджрдж рдХреА рд╣реИ рдХрд┐ RxJS рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореИрдВ рдЖрдкрдХреЗ рдЕрдзреНрдпрдпрди рдореЗрдВ рд╕рдлрд▓рддрд╛ рдХреА рдХрд╛рдордирд╛ рдХрд░рддрд╛ рд╣реВрдВ!

Source: https://habr.com/ru/post/hi444290/


All Articles