рдПрдХ рдСрдирд▓рд╛рдЗрди рдмреИрдВрдХрд┐рдВрдЧ рдкреНрд░рдгрд╛рд▓реА рдореЗрдВ RxJs рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ

рдкрд░рд┐рдЪрдп


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

рд╡реНрдпрд╛рдкрдХ рдЕрд░реНрде рдореЗрдВ "рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдХреЗ рдРрд╕реЗ рд╕рдВрдЧрдарди рд╕реЗ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрдЯрд╛ рдзрд╛рд░рд╛рдУрдВ рдХреА рд╕реНрдерд┐рддрд┐ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХрд╛ рдкреНрд░рд╕рд╛рд░ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЗ рд╕рд╛рде рдорд╣рддреНрд╡рдкреВрд░реНрдг рдореБрджреНрджреЗ рд╕реВрдЪрдирд╛ рдкреНрд░рд╡рд╛рд╣ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреА рд╕рд░рд▓рддрд╛ рдФрд░ рдкреНрд░рд╕реНрддреБрддрд┐ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рджреМрд░рд╛рди рд╣реЛрдиреЗ рд╡рд╛рд▓реА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рдЬрд╡рд╛рдм рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИред

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

рдЫреЛрдЯреЗ рд╡реНрдпрд╡рд╕рд╛рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдСрдирд▓рд╛рдЗрди рдмреИрдВрдХ рдХреЗ рд╡реЗрдм рдЗрдВрдЯрд░рдлреЗрд╕ рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдкрд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред UI рдХреЛ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рддреЗ рд╕рдордп, рд╣рдордиреЗ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд RxJs рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕рдВрд╕реНрдХрд░рдг 6 рдХреЗ рд╕рд╛рде Google рдХреЛрдгреАрдп 6 рдкреНрд▓реЗрдЯрдлрд╝реЙрд░реНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдпреВрдЖрдИ рдбрд┐рдЬрд╛рдЗрди рдХрд╛рд░реНрдп


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

  • рд╕реВрдЪреА рд╕реЗ рдЖрд╡рд╢реНрдпрдХ рд╕рдВрдЪрд╛рд▓рди рдХрд╛ рдЪрдпрди рдХрд░рдирд╛, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЛрдг рдЪреБрдХрд╛рдирд╛ рдпрд╛ рдЦрд╛рддрд╛ рдлрд┐рд░ рд╕реЗ рднрд░рдирд╛;
  • рд╕рдВрдмрдВрдзрд┐рдд рдлреЙрд░реНрдо рдХрд╛ рдЖрдВрд╢рд┐рдХ рд╕рдорд╛рдкрди (рднреБрдЧрддрд╛рди рд╡рд┐рд╡рд░рдг рд╕рдВрдЧрдарди рдХреЗ рдирд╛рдо рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкреЗрдпреА рдХреЗ рдирд╛рдо рд╕реЗ рд╕реНрд╡рддрдГ рднрд░ рдЬрд╛рддрд╛ рд╣реИ);
  • рдПрд╕рдПрдордПрд╕ рд╕рдВрджреЗрд╢ рдпрд╛ рдЗрд▓реЗрдХреНрдЯреНрд░реЙрдирд┐рдХ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдВрдЪрд╛рд▓рди рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкреБрд╖реНрдЯрд┐ред

рдбреЗрд╡рд▓рдкрд░ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдЗрди рдЪрд░рдгреЛрдВ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╢рд╛рдорд┐рд▓ рд╣реИ:

  • рдЖрд░рдмреАрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдирд╛, рд╕реВрдЪреА рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рдкрд░ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХрддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛;
  • рдбреЗрдЯрд╛ рдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдПрдХ рдлреЙрд░реНрдо рднрд░рддреЗ рд╕рдордп рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдбреЗрдЯрд╛ рдФрд░ рд╕реВрдЪрдирд╛ рд╕рдВрджреЗрд╢ рд╕реЗрд╡рд╛рдУрдВ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмреИрдВрдХ рдХрд╛ рдЯрд┐рди рдФрд░ рдмреАрдЖрдИрд╕реА);
  • рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рдлреЙрд░реНрдо рдХрд╛ рд╕рддреНрдпрд╛рдкрди;
  • рдлреЙрд░реНрдо рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдмрдЪрддред

рдЖрд░рдмреАрдПрд╕ рд╕рд┐рд╕реНрдЯрдо рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛


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

  • рдбреЗрдЯрд╛ рдЙрдкрд▓рдмреНрдзрддрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛;
  • рдЕрджреНрдпрддрди рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ред

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

рдЖрд░рдмреА рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд▓рд┐рдП рдХрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдЙрддреНрддрд░ рд╣реИрдВ:

  • {рд░рд┐рдХреНрдд: рд╕рддреНрдп} - рдбреЗрдЯрд╛ рдЕрднреА рддреИрдпрд╛рд░ рдирд╣реАрдВ рд╣реИ;
  • рдЕрджреНрдпрддрди рдбреЗрдЯрд╛ рдХреНрд▓рд╛рдЗрдВрдЯ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ;

{ empty: false // -   } 

  • рдПрдХ рдЧрд▓рддреАред

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╛рдкреНрддрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 const MIN_TIME = 2000; const MAX_TIME = 60000; const EXP_BASE = 1.4; request() //     .pipe( expand((response, index) => { const delayTime = Math.min(MIN_TIME * Math.pow(EXP_BASE, index), MAX_TIME); return response.empty ? request().pipe(delay(delayTime)) : EMPTY; }), last() ) .subscribe((response) => { /** -  */ }); 


рдЪрд▓реЛ рдХрджрдо рд╕реЗ рдХрджрдо рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВ:

  1. рд╣рдо рдПрдХ рдирд┐рд╡реЗрджрди рднреЗрдЬрддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдз ()
  2. рдЬрд╡рд╛рдм рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЬрд╛рддрд╛ рд╣реИред рд╡рд┐рд╕реНрддрд╛рд░ рдПрдХ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рд╕реНрдЯреЗрдЯрдореЗрдВрдЯ рд╣реИ рдЬреЛ рдЖрдВрддрд░рд┐рдХ рдФрд░ рдмрд╛рд╣рд░реА рдЕрд╡рд▓реЛрдХрди рдХреЗ рд▓рд┐рдП рдкреНрд░рддреНрдпреЗрдХ рдЕрдЧрд▓реЗ рдЕрд▓рд░реНрдЯ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреЗ рдмреНрд▓реЙрдХ рдХреЗ рднреАрддрд░ рдХреЛрдб рдХреЛ рджреЛрд╣рд░рд╛рддрд╛ рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдереНрд░реЗрдб рдЕрдкрдиреЗ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХрд░рддрд╛ред рдЗрд╕рд▓рд┐рдП, рдзрд╛рд░рд╛ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рддрд╛рдХрд┐ рдПрдХ рднреА рдЕрдЧрд▓рд╛ рди рд╣реЛ - рдИрдПрдордкреАрдЯреАрд╡рд╛рдИред
  3. рдпрджрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ {рд░рд┐рдХреНрдд: рд╕рддреНрдп} рдЖрдИ, рддреЛ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдордп рдХреА рджреЗрд░реА (рд╡рд┐рд▓рдВрдм рд╕рдордп) рдХреЗ рдмрд╛рдж рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдХреЛ рдЕрдзрд┐рднрд╛рд░ рдирд╣реАрдВ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдкреНрд░рддреНрдпреЗрдХ рдирдП рдЕрдиреБрд░реЛрдз рдХреЗ рд╕рд╛рде рдкрд┐рдВрдЧ рдХреЗ рд▓рд┐рдП рд╕рдордп рдЕрдВрддрд░рд╛рд▓ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред
  4. рдпрджрд┐ рдЕрдЧрд▓реЗ рдЕрдиреБрд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреБрдЫ рдФрд░ рдЖрдпрд╛ рдерд╛, рддреЛ рд╣рдо рдкрд┐рдВрдЧ рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрддреЗ рд╣реИрдВ (рдИрдПрдордкреАрдЯреАрд╡рд╛рдИ рд╡рд╛рдкрд╕ рд▓реМрдЯрддреЗ рд╣реИрдВ) рдФрд░ рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЧреНрд░рд╛рд╣рдХ (рдЕрдВрддрд┐рдо () рдСрдкрд░реЗрдЯрд░) рдХреЛ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВред
  5. рдЙрддреНрддрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рдкрд░рд┐рдгрд╛рдо рд▓реЗрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлреЙрд░реНрдо рдХреА рдПрдХ рд╡рд╕реНрддреБ рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ рдорд┐рд▓ рдЬрд╛рдПрдЧреА:

 { empty: false // -   } 


рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд░реВрдк


рдХреЛрдгреАрдп рдврд╛рдВрдЪреЗ рд╕реЗ ReactiveForms рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рднреБрдЧрддрд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд╡реЗрдм рд░реВрдк рдХреЛ рдбрд┐рдЬрд╛рдЗрди рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред

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

 this.myForm = new FormGroup({ name: new FormControl('', Validators.required), //          surname: new FormControl('') }); 


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

 this.myForm = this.fb.group({ name: ['', Validators.required], surname: '' }); 


рднреБрдЧрддрд╛рди рдЖрджреЗрд╢ рдкреГрд╖реНрда рдХреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдлрд╝реЙрд░реНрдо рдмрдирд╛рдиреЗ рдХреЗ рдмрд╛рдж, рдпрд╣ myForm рдлрд╝реЙрд░реНрдо рдХреЗ рд▓рд┐рдВрдХ рдХреЗ рд╕рд╛рде-рд╕рд╛рде рдЗрд╕рдХреЗ рдХреНрд╖реЗрддреНрд░реЛрдВ рдХреЗ рдирд╛рдо рдФрд░ рдЙрдкрдирд╛рдо рдХреЗ рдирд╛рдо рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред

 <form [formGroup]="myForm"> <label>Name: <input formControlName="name"> </label> <label>Surname: <input formControlName="surname"> </label> </form> 


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

 this.myForm.valueChanges .subscribe(value => { тАж //     }) 


рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рд╡реНрдпрд╛рд╡рд╕рд╛рдпрд┐рдХ рддрд░реНрдХ рднреБрдЧрддрд╛рди рдЧрдВрддрд╡реНрдп рдХреЗ рд╡рд┐рд╡рд░рдг рдореЗрдВ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рднрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ рдЬрдм рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдкреНрд░рд╛рдкреНрддрдХрд░реНрддрд╛ рдпрд╛ рд╕рдВрдЧрдарди рдХреЗ рдирд╛рдо рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рддрд╛ рд╣реИред рд╕рдВрдЧрдарди рдХреЗ TIN / рдирд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рдХреЛрдб рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛:

 this.payForm.valueChanges .pipe( mergeMap(value => this.getRequisites(value)) //       ) .subscribe(requisites => { this.patchFormByRequisites(requisites) //        }) 


рдорд╛рдиреНрдпрддрд╛


рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рджреЛ рд░реВрдкреЛрдВ рдореЗрдВ рдЖрддреЗ рд╣реИрдВ:

  • рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ;
  • рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХред

рд╣рдо рдирд┐рдпрдорд┐рдд рд░реВрдк рд╕реЗ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ - рдпреЗ рдХрд╛рд░реНрдп рд╣реИрдВ рдЬреЛ рдХреНрд╖реЗрддреНрд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рджрд░реНрдЬ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддреЗ рд╣реИрдВред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рд░реВрдкреЛрдВ рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ:
"рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдирд┐рдпрдВрддреНрд░рдг рд░реВрдкреЛрдВ рдХреЛ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рдФрд░ рдЧрд▓рдд рд╣реИ рддреЛ рдПрдХ рд╕рддреНрдп рдорд╛рди рджреЗрддрд╛ рд╣реИред"

 function customValidator(control) { return isInvalid(control.value) ? { code: "mistake", message: "smth wents wrong" } : null; } 


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

 function requredSeria(control) { const docType = control.parent.get("docType"); let error = null; if (docType && docType.value === "passport" && !control.value) { error = { code: "wrongSeria", message: "  " } } return error; } 


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

рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдХреЛ рдирд┐рдореНрди рд░реВрдк рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛:

  this.documentForm = this.fb.group({ docType: ['', Validators.required], seria: ['', requredSeria], number: '' }); 


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

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛ рдореЗрдВ рдПрдХ рдЕрдВрддрд░ рд╣реИ - рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдХрд╛ рдкреНрд░рдХрд╛рд░ред рд╕рддреНрдп рдпрд╛ рдорд┐рдереНрдпрд╛ рдореВрд▓реНрдп рдХреЛ рдПрдХ рд╡рд╛рджреЗ рдпрд╛ рдПрдХ рдЕрд╡рд▓реЛрдХрди рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдВрддреНрд░рдг рдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рд░реВрдк рдореЗрдВ рдПрдХ рд╕реНрдерд┐рддрд┐ (mySuperForm.status) рд╣реЛрддреА рд╣реИ, рдЬреЛ "рд╡реИрдз", "рдирд┐рд╡реЗрд╢", "рдЫреВрдЯ" рд╣реЛ рд╕рдХрддреА рд╣реИред рдЪреВрдВрдХрд┐ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рддреНрдпрд╛рдкрдирдХрд░реНрддрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдлреЙрд░реНрдо рдХрд┐рд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП "рднреБрдЧрддрд╛рди" рдХреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд╕реНрдерд┐рддрд┐ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж (mySuperForm.status === "PENDING"), рдЖрдк рдкреНрд░реАрд▓реЛрдбрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд░реВрдк рд╕реНрдЯрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдСрдЯреЛ рдмрдЪрд╛рдУ


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

рдХреНрд▓рд╛рдЗрдВрдЯ-рд╕рд░реНрд╡рд░ рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рдд: рд╕рд╣реЗрдЬрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдореБрдЦреНрдп рдкрд╣рд▓реВ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

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

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

 const lastRequest$ = new BehaviorSubject(null); //   queue$.subscribe(lastRequest$); queue$ .pipe( debounceTime(1000), exaustMap(request$ => request$.pipe( //  ,     map(response => ({request$, response})), //       catchError(() => of(null) //   ) ) .subscribe(({request$, response}) => { if (lastRequest$.value !== request$) { queue$.next(lastRequest$.value); //     } }); 


рдпрд╣ рдПрдХ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП saveQueue $ рдореЗрдВ рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдХреЙрдирд╕реЗрдкреНрдЯ рдореИрдк рдХреЗ рдмрдЬрд╛рдп рдПрдХреНрд╕рдЯрд╛рдкреНрд╕рд╛рдЙрдкрд░ рдСрдкрд░реЗрдЯрд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдкрд░ рдзреНрдпрд╛рди рджреЗрдВред рдпрд╣ рдСрдкрд░реЗрдЯрд░ рдмрд╛рд╣рд░реА рдЕрд╡рд▓реЛрдХрди рдХреЗ рд╕рднреА рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди рдХреЛ рдЕрдирджреЗрдЦрд╛ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдЖрдВрддрд░рд┐рдХ рдиреЗ рдЕрдкрдирд╛ рдЕрд╡рд▓реЛрдХрди ("рд╕рдВрдХрд▓рд┐рдд") рдкреВрд░рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЕрдиреБрд░реЛрдз рдХреЗ рджреМрд░рд╛рди рдирдИ рдЕрдзрд┐рд╕реВрдЪрдирд╛рдУрдВ рдХреА рдХрддрд╛рд░ рд╣реЛрдЧреА, рддреЛ рд╣рдореЗрдВ рдЕрдВрддрд┐рдо рдПрдХ рд▓реЗрдирд╛ рд╣реЛрдЧрд╛ рдФрд░ рдмрд╛рдХреА рдХреЛ рдЫреЛрдбрд╝ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред exaustMap рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕рд╣рд┐рдд рд╕рдм рдХреБрдЫ рдЫреЛрдбрд╝ рджреЗрдЧрд╛ред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╡реНрдпрд╡рд╣рд╛рд░ рдЕрдзрд┐рд╕реВрдЪрдирд╛ рдореЗрдВ рдЕрдВрддрд┐рдо рд╕реВрдЪрдирд╛ рдХреЛ рд╕рд╣реЗрдЬрддреЗ рд╣реИрдВ, рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдореЗрдВ, рдпрджрд┐ рд╡рд░реНрддрдорд╛рди рд╕рдВрд╕рд╛рдзрд┐рдд рдЕрдиреБрд░реЛрдз рдкрд┐рдЫрд▓реЗ рдПрдХ рд╕реЗ рдЕрд▓рдЧ рд╣реИ, рддреЛ рд╣рдо рдЕрдВрддрд┐рдо рдЕрдиреБрд░реЛрдз рдХреЛ рдлрд┐рд░ рд╕реЗ рдХрддрд╛рд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВрдЧреЗред

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

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


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

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

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


All Articles