RxJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреА рдореВрд▓ рдмрд╛рддреЗрдВред рднрд╛рдЧ 3. рдЙрдЪреНрдЪ рдЖрджреЗрд╢ рд╡реЗрдзрд╢рд╛рд▓рд╛



рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рджреВрд╕рд░реЗ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ, рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреНрдпреЛрдВ рд╣реИ, рдФрд░ рд╣рд╛рдпрд░ рдСрд░реНрдбрд░ рдСрдмреНрдЬрд░реНрд╡рдмрд▓реНрд╕ (рдмрд╛рдж рдореЗрдВ HOO рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдВрджрд░реНрднрд┐рдд) рдСрдкрд░реЗрдЯрд░реЛрдВ рдХреЛ рдЗрд╕рдореЗрдВ рдХреИрд╕реЗ рдорджрдж рдорд┐рд▓реЗрдЧреАред

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



рдереНрд░реЗрдбреНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп, рдПрдХ рд╕реНрдерд┐рддрд┐ рдЕрдХреНрд╕рд░ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИ рдЬрдм рдореВрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рджреВрд╕рд░реЗ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдПрдХ рдзрд╛рдЧреЗ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реЛрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдЬрд╛рдХреНрд╕ рдЕрдиреБрд░реЛрдз рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдФрд░ рд╡рд░реНрддрдорд╛рди рдереНрд░реЗрдб рдореЗрдВ рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдпрд╛ рдХрдИ рд╕рдорд╛рдирд╛рдВрддрд░ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рдкреВрд▓рд┐рдВрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЛ рд╡рд╛рджреЗ рдЬреИрд╕реЗ рддрдВрддреНрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдРрд╕реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ RxJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрдиреНрд╣реЗрдВ рд╣рд▓ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ? рдмреЗрд╢рдХ, рдФрд░ рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реИ рдЬрд┐рддрдирд╛ рдЖрдк рд╕реЛрдЪрддреЗ рд╣реИрдВ!

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

рд╕рдорд╕реНрдпрд╛


рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: рд╣рдореЗрдВ рд╣рд░ рд╕реЗрдХрдВрдб рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рд╕рд░реНрд╡рд░ рд╕реБрд▓рдн рд╣реИред рд╣рдо рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЯрд╛рдЗрдорд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВ:

timer(0, 1000).subscribe({ next: console.log }); 

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

рдЪреВрдВрдХрд┐ рдЖрдкрдХреЗ рдФрд░ рдореЗрд░реЗ рдкрд╛рд╕ рд╕рд░реНрд╡рд░ рдирд╣реАрдВ рд╣реИ, рдореИрдВ рд╕реБрдЭрд╛рд╡ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦреЗрдВ рдЬреЛ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдЕрдиреБрд░реЛрдз рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░рддрд╛ рд╣реИ:

 const makeRequest = () => { return timer(1000).pipe( mapTo('success') ) } 

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

рдпрд╣ рд╡рд╣ рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ рдореЗрдХ рд░реЗрдпрд░ рд╡рд┐рдзрд┐ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдИ рдЧрдИ рдзрд╛рд░рд╛ рдЬреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИ:



рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╡рд┐рдХрд▓реНрдк рд╣реИ: рд╕реНрдЯреНрд░реАрдо рдХреЗ рдЕрдВрджрд░ рдореЗрдХрдПрд░реЗрд╕реНрдЯреЗрд╕реНрдЯ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдирд╛ рдпрд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдпрд╣ рдЬрд┐рдореНрдореЗрджрд╛рд░реА рд╕реМрдВрдкрдирд╛?

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

 timer(0, 1000).pipe( map(() => makeRequest()) ).subscribe({ next: console.log }); 

рдЬрдм рд╣рдо рдЗрд╕ рддрд░рд╣ рдХрд╛ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВред рд╣рдореЗрдВ рдкрд╛рда "рд╕рдлрд▓рддрд╛" рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрджреЗрд╢ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ:



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

 timer(0, 1000).pipe( map(() => makeRequest()) ).subscribe({ next: observable => observable.subscribe({ next: console.log }); }); 

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

HOO


HOO рдПрдХ рд╡рд┐рд╢реЗрд╖ рдкреНрд░рдХрд╛рд░ рдХрд╛ рдХрдерди рд╣реИ рдЬреЛ рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдорд╛рди рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рд╣реА рдПрдХ рдСрдкрд░реЗрдЯрд░ рдорд░реНрдЬ рд╣реИред

рдЬрдм рдХреЛрдИ рд╕реНрдЯреНрд░реАрдо mergeAll рдкрд░ рдЖрддреА рд╣реИ, рддреЛ рд╡рд╣ рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреА рд╣реИред рдСрдкрд░реЗрдЯрд░ рдиреЗ рдЬрд┐рд╕ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рд╣реИ рдЙрд╕реЗ рдЖрдВрддрд░рд┐рдХ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдзрд╛рд░рд╛ рдЬрд┐рд╕рд╕реЗ рд╕рдВрдЪрд╛рд▓рдХ рдЕрдиреНрдп рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдорд╛рдиреЛрдВ рдХреЛ рдмрд╛рд╣реНрдп рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред

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

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреИрд╕реЗ рд╣рдо рдорд░реНрдЬ рдХреЗ рд╕рд╛рде рдЕрдкрдиреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 timer(0, 1000).pipe( map(() => makeRequest()) mergeAll() ).subscribe({ next: console.log }); 

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



рд╕рдВрдпреЛрдЬрди рдорд╛рдирдЪрд┐рддреНрд░ + рдорд░реНрдЬрдПрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП RxJS рдореЗрдВ рдПрдХ рдорд░реНрдЬ рдореИрдк рд╡рд┐рдзрд┐ рд╣реИ:

 timer(0, 1000).pipe( mergeMap(() => makeRequest()) ).subscribe({ next: console.log }); 

рдЬрдм рдХреЛрдИ рдмрд╛рд╣рд░реА рдереНрд░реЗрдб рдХреЛрдИ рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рддреЛ рдорд░реНрдЬ рдореИрдк рдСрдкрд░реЗрдЯрд░ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЗрд╕рдХреЗ рдкрд╛рд╕ рднреЗрдЬ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдирдпрд╛ рдереНрд░реЗрдб рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред рдлрд┐рд░ рдорд░реНрдЬ рдореИрдк рд╕рдмрд╕реНрдХреНрд░рд╛рдЗрдмреНрдб рдЬрдирд░реЗрдЯ рд╕реНрдЯреНрд░реАрдо рдХреЛред



MergeAll / mergeMap рдСрдкрд░реЗрдЯрд░ рдХреА рдЦрд╝рд╛рд╕рд┐рдпрдд рдпрд╣ рд╣реИ рдХрд┐ рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рдзрд╛рд░рд╛ рдЗрд╕рдХреЗ рдиреАрдЪреЗ рдЖрддреА рд╣реИ, рддреЛ рдпрд╣ рднреА рдЗрд╕рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рдмрд╛рд╣рд░реА рдзрд╛рд░рд╛ рдореЗрдВ, рд╣рдо рдПрдХ рд╕рд╛рде рдХрдИ рдЖрдВрддрд░рд┐рдХ рд▓реЛрдЧреЛрдВ рд╕реЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдЗрдП рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:

  timer(0, 1000) 

рдпрд╣ рд╣реИ рдХрд┐ рдорд░реНрдЬрдкреЗрдЬ рдСрдкрд░реЗрдЯрд░ рдХреЗ рдмрд┐рдирд╛ рдмрд╛рд╣рд░реА рдзрд╛рд░рд╛ рдХреИрд╕реЗ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:



рдФрд░ рдЗрд╕рд▓рд┐рдП рдорд░реНрдЬ рдореИрдк рдХреЗ рд╕рд╛рде:

 timer(0, 1000).pipe( mergeMap(() => interval(1000)) ) 



рд╣рд░ рд╕реЗрдХрдВрдб, рд╣рдо рдПрдХ рдирдпрд╛ рдЖрдВрддрд░рд┐рдХ рдереНрд░реЗрдб рдмрдирд╛рддреЗ рд╣реИрдВ рдФрд░ рдорд░реНрдЬ рдореИрдк рдХреЛ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдХрдИ рдЖрдВрддрд░рд┐рдХ рдзрд╛рдЧреЗ рд╣реИрдВ, рдЬрд┐рдирдореЗрдВ рд╕реЗ рдореВрд▓реНрдп рдмрд╛рд╣рд░реА рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:





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

рд╕рдВрдШ / рд╕рдВрдШ


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

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

рдпрджрд┐ рдПрдХ рдзрд╛рдЧреЗ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рджреМрд░рд╛рди рдПрдХ рдирдпрд╛ рдЗрд╕реЗ рдЙрддрд░рддрд╛ рд╣реИ, рддреЛ рдЗрд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдПрдХ рдкреВрд░рд╛ рди рд╣реЛ рдЬрд╛рдПред

 // ,  1     const firstInnerObservable = timer(1000).pipe( mapTo(1) ); // ,  2     const secondInnerObservable = timer(500).pipe( mapTo(2) ); of( firstInnerObservable, secondInnerObservable ).pipe( concatAll() ).subscribe({ next: console.log }); 

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдЯрд╛рдЗрдорд░ рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рджреЛ рдзрд╛рдЧреЗ рдмрдирд╛рддреЗ рд╣реИрдВред рд╕реНрдкрд╖реНрдЯрддрд╛ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╡рд┐рднрд┐рдиреНрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП mapTo рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдкрд╣рд▓рд╛ рдзрд╛рдЧрд╛ 1 рдЙрддреНрдкрдиреНрди рдХрд░реЗрдЧрд╛, рджреВрд╕рд░рд╛ - 2. рдПрдХ рдмрд╛рд╣рд░реА рдзрд╛рдЧрд╛ рд╡рд┐рдзрд┐ рдХреЗ рдЙрдкрдпреЛрдЧ рд╕реЗ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рджреЛ рдХреЛ рд▓реЗрддрд╛ рд╣реИред

ConcatAll рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рдкрд╣рд▓реЗ FirstInnerObservable рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЗрд╕реЗ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреЗрд╡рд▓ рдкрд╣рд▓рд╛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рджреВрд╕рд░реЗInnerObservable рдХреЛред рдпрд╣рд╛рдБ рдмрд╛рд╣рд░реА рдзрд╛рд░рд╛ рдХреИрд╕реА рджрд┐рдЦреЗрдЧреА:



рдпрджрд┐ рд╣рдо concatAll рдХреЛ mergeAll рд╕реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╕реНрдЯреНрд░реАрдо рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧреА:

 of( firstInnerObservable, secondInnerObservable ).pipe( mergeAll() ).subscribe({ next: console.log }); 



switchAll / switchMap


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

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗрдВ рдФрд░ switchAll рдХреЛ рдмрджрд▓ рджреЗрдВ рдФрд░ рдлрд┐рд░ рджреЗрдЦреЗрдВ рдХрд┐ рдмрд╛рд╣рд░реА рдкреНрд░рд╡рд╛рд╣ рдХреИрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ:

 of( firstInnerObservable, secondInnerObservable ).pipe( switchAll() ).subscribe({ next: console.log }); 



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

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

рдердХрд╛рд╡рдЯ / рдердХрд╛рд╡рдЯ


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

 of( firstInnerObservable, secondInnerObservable ).pipe( exhaust() ).subscribe({ next: console.log }); 



рдКрдкрд░ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдореЗрдВ рдПрдХ рдбреНрдпреВрд╕ рдирд╣реАрдВ рдорд┐рд▓рд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрд╕ рд╕рдордп рдСрдкрд░реЗрдЯрд░ рдкрд╣рд▓реЗ рдзрд╛рдЧреЗ рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛, рдФрд░ рдмрд╕ рджреВрд╕рд░реЗ рдХреЛ рдЧрд┐рд░рд╛ рджрд┐рдпрд╛ред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рд▓реЛрдЧреЛрдВ рдХреЗ рдкрд╛рд╕ рдПрдХ рд╕рд╡рд╛рд▓ рд╣реИ, рдРрд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрдм рд╣реЛ рд╕рдХрддреА рд╣реИ? рдПрдХ рдЕрдЪреНрдЫрд╛ рдЙрджрд╛рд╣рд░рдг рд▓реЙрдЧрд┐рди рдлреЙрд░реНрдо рд╣реИред рдпрд╣ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рдХрдИ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдПрдХ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддрд╛ред

рд╣рдо рдЖрд╡реЗрджрди рдХреЛ рдЕрдВрддрд┐рдо рд░реВрдк рджреЗ рд░рд╣реЗ рд╣реИрдВ


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

 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) }) 

рдорд╛рди рд▓реЗрддреЗ рд╣реИрдВ рдХрд┐ GitHub рд╕рд░реНрд╡рд░ рднрд╛рд░реА рднрд░рдХрдо рд╣реЛрдЧрд╛, рддреЛ рд╣рдорд╛рд░реА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧреЗрдЧрд╛ред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рд╕рдВрднрд╡рддрдГ рдХреНрдпрд╛ рдЧрд▓рдд рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

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

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

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

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

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

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

Http рд░рджреНрдж рдХрд░реЗрдВ


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

рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рдереЛрдбрд╝рд╛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рдмрдирд╛рдПрдВ рдЬреЛ рднреНрд░реВрдг рдХреЙрд▓ рдХреЛ рдЕрд╡рд▓реЛрдХрдиреАрдп рдореЗрдВ рд▓рдкреЗрдЯреЗ:

 const createCancellableRequest = (url) => { //      const controller = new AbortController(); const signal = controller.signal; return new Observable(observer => { fetch(url, { signal }) .then(response => { if (response.ok) { return response.json(); } throw new Error(''); }) //     .then(result => observer.next(result)) //   .then(() => observer.complete()) //   ,     .catch(error => observer.error(error)); // ,    return () => { //   controller.abort(); }; }); }; 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ getUsersRepsFromApi рд╡рд┐рдзрд┐ рдмрджрд▓реЗрдВ:

 const getUsersRepsFromAPI = (username) => { const url = `https://api.github.com/users/${ username }/repos`; return createCancellableRequest(url); } 

рдЕрдм рд╡рд┐рдзрд┐ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ рдЕрд╡рд▓реЛрдХрдиреАрдп рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо switchMap рдореЗрдВ рдЖрд╡рд░рдг рд╕реЗ рдирд┐рдХрд╛рд▓рддреЗ рд╣реИрдВ:

 switchMap(value => { return getUsersRepsFromAPI(value).pipe( catchError(err => of([]) ) ) 

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

рд╡рд╣ рд╕рдм рд╣реИ! рд╕рднреА рдирдореВрдирд╛ рдХреЛрдб рдпрд╣рд╛рдВ рджреЗрдЦреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ ред

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


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

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

рдЕрдВрдд рдореЗрдВ: рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ рд╕рджрд╕реНрдпрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рди рдХрд░реЗрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╡рд╣рд╛рдВ HOO рд╣реИ!

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


All Articles