рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдирдорд╕реНрддреЗ рд╕рдмреИред Sergey Omelnitsky рд╕рдореНрдкрд░реНрдХрдорд╛ рд╣реБрдиреБрд╣реБрдиреНрдЫред рдХреЗрд╣реА рд╕рдордп рдЕрдШрд┐ рдореИрд▓реЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдорд╛ рд╕реНрдЯреНрд░рд┐рдо рд╣реЛрд╕реНрдЯ рдЧрд░реЗрдХреЛ рдерд┐рдПрдБ, рдЬрд╣рд╛рдБ рдореИрд▓реЗ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдиреАрдХреЛ рдмрд╛рд░реЗрдорд╛ рдХреБрд░рд╛ рдЧрд░реЗрдХреЛ рдерд┐рдПрдБред рдЖрдЬ рдо рдпрд╕ рд╕рд╛рдордЧреНрд░реАрдорд╛ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ рд▓рд┐рди рдЪрд╛рд╣рдиреНрдЫреБред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рддрд░ рд╣рд╛рдореАрд▓реЗ рдореБрдЦреНрдп рд╕рд╛рдордЧреНрд░реА рд╕реБрд░реБ рдЧрд░реНрдиреБ рдЕрдШрд┐, рд╣рд╛рдореАрд▓реЗ рдПрдХ рдкрд░рд┐рдЪрдпрд╛рддреНрдордХ рдиреЛрдЯ рдмрдирд╛рдЙрди рдЖрд╡рд╢реНрдпрдХ рдЫред рддреНрдпрд╕реЛрднрдП рдкрд░рд┐рднрд╛рд╖рд╛рд╣рд░реВрд╕рдБрдЧ рд╕реБрд░реБ рдЧрд░реМрдВ: рд╕реНрдЯреНрдпрд╛рдХ рд░ рд▓рд╛рдо рдХреЗ рд╣реЛ?

рд╕реНрдЯреНрдпрд╛рдХ рдПрдЙрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛ рдЬрд╕рдХреЛ рддрддреНрд╡рд╣рд░реВ рдЕрдиреНрддрд┐рдо-рдЗрди, рдлрд░реНрд╕реНрдЯ-рдЖрдЙрдЯ LIFO рдЖрдзрд╛рд░рдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫ

рд▓рд╛рдо рдПрдЙрдЯрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛ рдЬрд╕рдХреЛ рддрддреНрд╡рд╣рд░реВ рдкрд╣рд┐рд▓реЛ-рдЗрди, рдлрд░реНрд╕реНрдЯ-рдЖрдЙрдЯ FIFO рдЖрдзрд╛рд░рдорд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░рд┐рдиреНрдЫ

рдареАрдХ рдЫ, рдЬрд╛рд░реА рд░рд╛рдЦреМрдВред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

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

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

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

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

рдирд┐рдореНрди рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ рд░ рдпрд╕рдХреЛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╕рд╛рде рд╕реБрд░реВ рдЧрд░реМрдВред рдкреНрд░рдгрд╛рд▓реАрдорд╛ рдХреЗ рд╣реБрдиреНрдЫ рд╣реЗрд░реМрдВред

console.log('Hi');
setTimeout(function cb1() {
    console.log('cb1');
}, 5000);
console.log('Bye');

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

1) рдЕрдЭреИ рдХреЗрд╣рд┐ рднрдЗрд░рд╣реЗрдХреЛ рдЫреИрдиред рдмреНрд░рд╛рдЙрдЬрд░ рдХрдиреНрд╕реЛрд▓ рд╕реНрдкрд╖реНрдЯ рдЫ, рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХ рдЦрд╛рд▓реА рдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

2) рддреНрдпрд╕рдкрдЫрд┐ console.log('Hi') рдЖрджреЗрд╢ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рдердкрд┐рдПрдХреЛ рдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

3) рд░ рдпреЛ рдкреВрд░рд╛ рд╣реБрдиреНрдЫ

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

4) рддреНрдпрд╕рдкрдЫрд┐ console.log('Hi') рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдиреНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рел) рдЕрдм рд╕реЗрдЯрдЯрд╛рдЗрдордЖрдЙрдЯ(function cb5() {тАж }) рдХрдорд╛рдгреНрдбрдорд╛ рдЬрд╛рдиреБрд╣реЛрд╕реНред рдпреЛ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рдердкрд┐рдПрдХреЛ рдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

6) setTimeout(function cb1() {тАж }) рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХреЛ рдЫред рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдЯрд╛рдЗрдорд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рдЬреБрди рд╡реЗрдм API рдХреЛ рдЕрдВрд╢ рд╣реЛред рдпрд╕рд▓реЗ рдХрд╛рдЙрдиреНрдЯрдбрд╛рдЙрди рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

7) setTimeout(function cb1() {... }) рдЖрджреЗрд╢рд▓реЗ рдЖрдлреНрдиреЛ рдХрд╛рдо рдкреВрд░рд╛ рдЧрд░реЗрдХреЛ рдЫ рд░ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдпреЛред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

8) рдХрдорд╛рдгреНрдб console.log('Bye') рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рдердкрд┐рдПрдХреЛ рдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

9) console.log('Bye') рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХреЛ рдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

10) рдЖрджреЗрд╢ console.log('Bye') рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдпреЛред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

11) рдХрдореНрддрд┐рдорд╛ 5000 ms рдмрд┐рддрд┐рдЗрд╕рдХреЗрдкрдЫрд┐, рдЯрд╛рдЗрдорд░ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ рд░ рдХрд▓рдмреНрдпрд╛рдХ рд▓рд╛рдордорд╛ рдХрд▓рдмреНрдпрд╛рдХ cb1 рд░рд╛рдЦреНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

12) рдШрдЯрдирд╛ рд▓реБрдкрд▓реЗ рдХрд▓рдмреНрдпрд╛рдХ рд▓рд╛рдордмрд╛рдЯ рдкреНрд░рдХрд╛рд░реНрдп cb1 рд▓рд┐рдиреНрдЫ рд░ рдпрд╕рд▓рд╛рдИ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рд░рд╛рдЦреНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

13) рдкреНрд░рдХрд╛рд░реНрдп cb1 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реБрдиреНрдЫ рд░ рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ console.log('cb1') рдердкреНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

14) console.log('cb1') рдЖрджреЗрд╢ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЧрд░рд┐рдПрдХреЛ рдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

15) рдЖрджреЗрд╢ console.log('cb1') рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдпреЛред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

16) рдкреНрд░рдХрд╛рд░реНрдп cb1 рдХрд▓ рд╕реНрдЯреНрдпрд╛рдХрдмрд╛рдЯ рд╣рдЯрд╛рдЗрдпреЛред

рдЧрддрд┐рд╢реАрд▓рддрд╛ рдорд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реЗрд░реМрдВ:

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдард┐рдХ рдЫ, рд╣рд╛рдореАрд▓реЗ рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдиреА рдХрд╕рд░реА рд▓рд╛рдЧреВ рд╣реБрдиреНрдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдпреМрдВред рдЕрдм рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЛ рд╡рд┐рдХрд╛рд╕ рдХреЛ рдмрд╛рд░реЗ рдорд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рдХреБрд░рд╛ рдЧрд░реМрдВред

рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдХреЛрдбрдХреЛ рд╡рд┐рдХрд╛рд╕ред

a(function (resultsFromA) {
    b(resultsFromA, function (resultsFromB) {
        c(resultsFromB, function (resultsFromC) {
            d(resultsFromC, function (resultsFromD) {
                e(resultsFromD, function (resultsFromE) {
                    f(resultsFromE, function (resultsFromF) {
                        console.log(resultsFromF);
                    })
                })
            })
        })
    })
});

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

  • рдХреЛрдбрдХреЛ рдЬрдЯрд┐рд▓рддрд╛ рдмрдвреНрджреИ рдЬрд╛рдБрджрд╛, рдкрд░рд┐рдпреЛрдЬрдирд╛ рджреНрд░реБрдд рд░реВрдкрдорд╛ рдЕрд╕реНрдкрд╖реНрдЯ, рдмрд╛рд░рдореНрдмрд╛рд░ рдиреЗрд╕реНрдЯреЗрдб рдмреНрд▓рдХрд╣рд░реВрдорд╛ рдкрд░рд┐рдгрдд рд╣реБрдиреНрдЫ - "рдХрд▓рдмреНрдпрд╛рдХ рдирд░рдХ"ред
  • рддреНрд░реБрдЯрд┐ рд╣реНрдпрд╛рдиреНрдбрд▓рд┐рдВрдЧ рдорд┐рд╕ рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрди рд╕рдХреНрдЫред
  • рддрдкрд╛рдИрдВрд▓реЗ рд░рд┐рдЯрд░реНрдирдХреЛ рд╕рд╛рде рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐рд╣рд░реВ рдлрд░реНрдХрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдиред

рдкреНрд░рдорд┐рд╕рдХреЛ рдЖрдЧрдордирд╕рдБрдЧреИ рдЕрд╡рд╕реНрдерд╛ рдЕрд▓рд┐рдХрддрд┐ рд╕реБрдзреНрд░рд┐рдпреЛ ред

new Promise(function(resolve, reject) {
    setTimeout(() => resolve(1), 2000);

}).then((result) => {
    alert(result);
    return result + 2;

}).then((result) => {
    throw new Error('FAILED HERE');
    alert(result);
    return result + 2;

}).then((result) => {
    alert(result);
    return result + 2;

}).catch((e) => {
    console.log('error: ', e);
});

  • рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдЪреЗрдирд╣рд░реВ рджреЗрдЦрд╛ рдкрд░реНрдпреЛ, рдЬрд╕рд▓реЗ рдХреЛрдб рдкрдвреНрди рдпреЛрдЧреНрдпрддрд╛рдорд╛ рд╕реБрдзрд╛рд░ рдЧрд░реНрдпреЛ
  • рддреНрд░реБрдЯрд┐рд╣рд░реВ рд╕рдорд╛рддреНрдирдХреЛ рд▓рд╛рдЧрд┐ рдЫреБрдЯреНрдЯреИ рд╡рд┐рдзрд┐ рджреЗрдЦрд╛ рдкрд░реНтАНрдпреЛ
  • Promise.all рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдорд╛рдирд╛рдиреНрддрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рд╕рдореНрднрд╛рд╡рдирд╛ рдердкрд┐рдпреЛ
  • рд╣рд╛рдореА async/await рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдиреЗрд╕реНрдЯреЗрдб рдПрд╕рд┐рдиреНрдХреНрд░реЛрдиреА рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ

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

рдард┐рдХ рдЫ, рд╣рд╛рдореАрд▓реЗ рд╕рд╣рдЬ рд░реВрдкрдорд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩрдорд╛ рдкреБрдЧреЗрдХрд╛ рдЫреМрдВред рдердХрд┐рдд? рдЦреИрд░, рд╕реМрднрд╛рдЧреНрдп рджреЗрдЦрд┐, рддрдкрд╛рдИрдВ рдХреЗрд╣рд┐ рдЪрд┐рдпрд╛ рдмрдирд╛рдЙрди рдЬрд╛рди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд╕реЛрдЪреНрдиреБрд╣реЛрд╕реН рд░ рдердк рдкрдвреНрди рдлрд░реНрдХрдиреБрд╣реЛрд╕реНред рд░ рдЬрд╛рд░реА рд░рд╛рдЦреНрдЫреБред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧтАКрдбрд╛рдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рд░ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╕рд╛рд░рдорд╛ рдХреЗрдиреНрджреНрд░рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ рдкреНрд░рддрд┐рдорд╛рди рд╣реЛред рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо рднрдиреЗрдХреЛ рдХреЗ рд╣реЛ рднрдиреЗрд░ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВред

// ╨Я╨╛╨╗╤Г╤З╨░╨╡╨╝ ╤Б╤Б╤Л╨╗╨║╤Г ╨╜╨░ ╤Н╨╗╨╡╨╝╨╡╨╜╤В
const input = ducument.querySelector('input');

const eventsArray = [];

// ╨Я╤Г╤И╨╕╨╝ ╨║╨░╨╢╨┤╨╛╨╡ ╤Б╨╛╨▒╤Л╤В╨╕╨╡ ╨▓ ╨╝╨░╤Б╤Б╨╕╨▓ eventsArray
input.addEventListener('keyup',
    event => eventsArray.push(event)
);

рдХрд▓реНрдкрдирд╛ рдЧрд░реМрдВ рдХрд┐ рд╣рд╛рдореАрд╕рдБрдЧ рдЗрдирдкреБрдЯ рдлрд┐рд▓реНрдб рдЫред рд╣рд╛рдореА рдПрд░реЗ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджреИрдЫреМрдВ рд░ рдЖрдЧрдд рдШрдЯрдирд╛рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдХреБрдЮреНрдЬреАрдЕрдкрдХреЛ рд▓рд╛рдЧрд┐ рд╣рд╛рдореА рдШрдЯрдирд╛рд▓рд╛рдИ рд╣рд╛рдореНрд░реЛ рдПрд░реЗрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдиреЗрдЫреМрдВред рдПрдХреИ рд╕рдордпрдорд╛, рдо рдиреЛрдЯ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рд╣рд╛рдореНрд░реЛ рдПрд░реЗ рд╕рдордп рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдЧрд░рд┐рдПрдХреЛ рдЫ, рдЕрд░реНрдерд╛рддреНред рдкрдЫрд┐рдХрд╛ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЕрдШрд┐рд▓реНрд▓реЛ рдШрдЯрдирд╛рд╣рд░реВрдХреЛ рд╕реВрдЪрдХрд╛рдВрдХ рднрдиреНрджрд╛ рдареВрд▓реЛ рдЫред рдпрд╕реНрддреЛ рдПрд░реЗ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣рдХреЛ рд╕рд░рд▓ рдореЛрдбреЗрд▓ рд╣реЛ, рддрд░ рдпреЛ рдЕрдЭреИ рдкреНрд░рд╡рд╛рд╣ рд╣реЛрдЗрдиред рдпрд╕ рдПрд░реНрд░реЗрд▓рд╛рдИ рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдкрдорд╛ рд╕реНрдЯреНрд░рд┐рдо рднрдирд┐рдиреНрдЫ, рдпрд╕рд▓реЗ рдХреБрдиреИ рди рдХреБрдиреИ рд░реВрдкрдорд╛ рдЧреНрд░рд╛рд╣рдХрд╣рд░реВрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░реНрди рд╕рдХреНрд╖рдо рд╣реБрдиреБрдкрд░реНрджрдЫ рдХрд┐ рдпрд╕рдорд╛ рдирдпрд╛рдБ рдбрд╛рдЯрд╛ рдЖрдПрдХреЛ рдЫред рдпрд╕рд░реА рд╣рд╛рдореА рдкреНрд░рд╡рд╛рд╣рдХреЛ рдкрд░рд┐рднрд╛рд╖рд╛рдорд╛ рдЖрдЙрдБрдЫреМрдВред

рдбрд╛рдЯрд╛ рд╕реНрдЯреНрд░рд┐рдо

const { interval } = Rx;
const { take } = RxOperators;

interval(1000).pipe(
    take(4)
)

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдлреНрд▓реЛтАКрд╕рдордп рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдЧрд░рд┐рдПрдХреЛ рдбреЗрдЯрд╛рдХреЛ рдПрд░реНрд░реЗ рд╣реЛ рдЬрд╕рд▓реЗ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рднрдПрдХреЛ рд╕рдВрдХреЗрдд рдЧрд░реНрди рд╕рдХреНрдЫред рдЕрдм рдХрд▓реНрдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рдХрд┐ рдХреЛрдб рд▓реЗрдЦреНрди рдХрддреНрддрд┐рдХреЛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реБрдиреНрдЫ рдЬрд╕рдорд╛ рдПрдЙрдЯрд╛ рдХрд╛рд░реНрдпрд▓реЗ рдХреЛрдбрдХреЛ рд╡рд┐рднрд┐рдиреНрди рднрд╛рдЧрд╣рд░реВрдорд╛ рдзреЗрд░реИ рдШрдЯрдирд╛рд╣рд░реВ рдХрд▓ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рд╣реБрдиреНрдЫред рд╣рд╛рдореА рдХреЗрд╡рд▓ рд╕реНрдЯреНрд░рд┐рдордХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреНрдЫреМрдВ рд░ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рд╣реБрдБрджрд╛ рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╕реВрдЪрд┐рдд рдЧрд░реНрдиреЗрдЫред рд░ RxJs рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рдпреЛ рдЧрд░реНрди рд╕рдХреНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

RxJS рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рдЕрдиреБрдХреНрд░рдорд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рд░ рдШрдЯрдирд╛-рдЖрдзрд╛рд░рд┐рдд рдХрд╛рд░реНрдпрдХреНрд░рдорд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдиреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реЛред рдкреБрд╕реНрддрдХрд╛рд▓рдпрд▓реЗ рдЖрдзрд╛рд░рднреВрдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп, рдзреЗрд░реИ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХрд╛рд░ (рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ, рдЕрдиреБрд╕реВрдЪрдХ, рд╡рд┐рд╖рдп) рд░ рд╕рдЩреНрдХрд▓рдирд╣рд░реВ рдЬрд╕реНрддреИ рдШрдЯрдирд╛рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ (рдирдХреНрд╕рд╛, рдлрд┐рд▓реНрдЯрд░, рдХрдо, рд╣рд░реЗрдХ рд░ JavaScript Array рдмрд╛рдЯ рд╕рдорд╛рди)ред

рдпрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдЖрдзрд╛рд░рднреВрдд рдЕрд╡рдзрд╛рд░рдгрд╛рд╣рд░реВ рдмреБрдЭреМрдВред

рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп, рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ, рдирд┐рд░реНрдорд╛рддрд╛

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

рдЕрдмреНрдЬрд░реНрднреЗрдмрд▓рд▓реЗ рдЕрдкрдбреЗрдЯрд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕рд╣рдпреЛрдЧреА рд╕рдВрдпрдиреНрддреНрд░ рд▓рд╛рдЧреВ рдЧрд░реНрджрдЫ, рддрдерд╛рдХрдерд┐рдд рдЕрд╡рд▓реЛрдХрдирдХрд░реНрддрд╛рд▓реЗред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХрдХрд╛ рд▓рд╛рдЧрд┐ рдорд╛рдирд╣рд░реВрдХреЛ рд╕реНрд░реЛрдд рднрдирд┐рдиреНрдЫ рдирд┐рд░реНрдорд╛рддрд╛ред рдпреЛ рдПрдХ array, iterator, рд╡реЗрдм рд╕рдХреЗрдЯ, рдШрдЯрдирд╛ рдХреЛ рдХреЗрд╣рд┐ рдкреНрд░рдХрд╛рд░, рдЖрджрд┐ рд╣реБрди рд╕рдХреНрдЫред рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рднрдиреНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рдЕрдмреНрдЬрд░реНрднреЗрдмрд▓ рднрдиреЗрдХреЛ рдирд┐рд░реНрдорд╛рддрд╛ рд░ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдмреАрдЪрдХреЛ рдХрдиреНрдбрдХреНрдЯрд░ рд╣реЛред

рдЕрд╡рд▓реЛрдХрдирдпреЛрдЧреНрдп рддреАрди рдкреНрд░рдХрд╛рд░рдХрд╛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдШрдЯрдирд╛рд╣рд░реВ рд╣реНрдпрд╛рдиреНрдбрд▓ рдЧрд░реНрджрдЫ:

  • рдЕрд░реНрдХреЛ - рдирдпрд╛рдБ рдбрд╛рдЯрд╛
  • рддреНрд░реБрдЯрд┐ - рдпрджрд┐ рдЕрдиреБрдХреНрд░рдо рдЕрдкрд╡рд╛рджрдХреЛ рдХрд╛рд░рдг рд╕рдорд╛рдкреНрдд рднрдпреЛ рднрдиреЗ рддреНрд░реБрдЯрд┐ред рдпреЛ рдШрдЯрдирд╛рд▓реЗ рдХреНрд░рдордХреЛ рд╕рдорд╛рдкреНрддрд┐рд▓рд╛рдИ рдкрдирд┐ рдЬрдирд╛рдЙрдБрдЫред
  • рдкреВрд░рд╛ - рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреВрд░рд╛ рдХреЛ рдмрд╛рд░реЗ рдорд╛ рд╕рдВрдХреЗрддред рдпрд╕рдХреЛ рдорддрд▓рдм рддреНрдпрд╣рд╛рдБ рдХреБрдиреИ рдирдпрд╛рдБ рдбрд╛рдЯрд╛ рд╣реБрдиреЗрдЫреИрдиред

рдбреЗрдореЛ рд╣реЗрд░реМрдВ:

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рд╕реБрд░реБрдорд╛ рд╣рд╛рдореА рдорд╛рдирд╣рд░реВ 1, 2, 3, рд░ 1 рд╕реЗрдХреЗрдиреНрдб рдкрдЫрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореАрд▓реЗ 4 рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВ рд░ рд╣рд╛рдореНрд░реЛ рд╕реНрдЯреНрд░рд┐рдо рд╕рдорд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫреМрдВред

рдареВрд▓реЛ рд╕реНрд╡рд░рдорд╛ рд╕реЛрдЪреНрджреИ

рд░ рддреНрдпрд╕рдкрдЫрд┐ рдореИрд▓реЗ рдорд╣рд╕реБрд╕ рдЧрд░реЗрдВ рдХрд┐ рдпрд╕рдХреЛ рдмрд╛рд░реЗрдорд╛ рд▓реЗрдЦреНрдиреБ рднрдиреНрджрд╛ рдмрддрд╛рдЙрдиреБ рдзреЗрд░реИ рд░реЛрдЪрдХ рдерд┐рдпреЛред ЁЯША

рд╕рджрд╕реНрдпрддрд╛

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

рдзрд╛рд░рд╛ рдХреЛ рдкреНрд░рдХрд╛рд░

рдЧрд░рдо
рдХрд▓реНрдб

рдирд┐рд░реНрдорд╛рддрд╛ рдЕрд╡рд▓реЛрдХрдирдпреЛрдЧреНрдп рдмрд╛рд╣рд┐рд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ
рдирд┐рд░реНрдорд╛рддрд╛ рдЕрд╡рд▓реЛрдХрди рдпреЛрдЧреНрдп рднрд┐рддреНрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ

рдЕрд╡рд▓реЛрдХрдирдпреЛрдЧреНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрд╛ рдбрд╛рдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░рд┐рдиреНрдЫ
рдбрд╛рдЯрд╛ рд╕рджрд╕реНрдпрддрд╛ рдХреЛ рд╕рдордпрдорд╛ рдкреНрд░рджрд╛рди рдЧрд░рд┐рдПрдХреЛ рдЫ

рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдЧрд░реНрдирдХрд╛ рд▓рд╛рдЧрд┐ рдердк рддрд░реНрдХ рдЪрд╛рд╣рд┐рдиреНрдЫ
рдереНрд░реЗрдб рдЖрдлреИрдВ рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ

рдПрдХ-рджреЗрдЦрд┐-рдзреЗрд░реИ рд╕рдореНрдмрдиреНрдз рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ
рдПрдХ-рджреЗрдЦрд┐-рдПрдХ рд╕рдореНрдмрдиреНрдз рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ

рд╕рдмреИ рд╕рджрд╕реНрдпрддрд╛рд╣рд░реВрдХреЛ рдПрдЙрдЯреИ рдЕрд░реНрде рдЫ
рд╕рджрд╕реНрдпрддрд╛рд╣рд░реВ рд╕реНрд╡рддрдиреНрддреНрд░ рдЫрдиреН

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

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

рдо рдиреЛрдЯ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрдЫреБ рдХрд┐ рддреНрдпрд╣рд╛рдБ рддрдерд╛рдХрдерд┐рдд рдиреНрдпрд╛рдиреЛ рдкреНрд░рд╡рд╛рд╣рд╣рд░реВ рдкрдирд┐ рдЫрдиреН (рдореИрд▓реЗ рдпреЛ рдкрд░рд┐рднрд╛рд╖рд╛ рдЕрддреНрдпрдиреНрддреИ рд╡рд┐рд░рд▓реИ рд░ рд╡рд┐рджреЗрд╢реА рд╕рдореБрджрд╛рдпрд╣рд░реВрдорд╛ рдорд╛рддреНрд░ рднреЗрдЯреЗрдХреЛ рдЫреБ) - рдпреЛ рдПрдХ рдкреНрд░рд╡рд╛рд╣ рд╣реЛ рдЬреБрди рдЪрд┐рд╕реЛ рдкреНрд░рд╡рд╛рд╣рдмрд╛рдЯ рддрд╛рддреЛрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рд╣реБрдиреНрдЫред рдкреНрд░рд╢реНрди рдЙрдареНрдЫ - рдХрд╣рд╛рдБ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ)) рдо рдЕрднреНрдпрд╛рд╕рдмрд╛рдЯ рдЙрджрд╛рд╣рд░рдг рджрд┐рдиреЗрдЫреБред

рдо Angular рд╕рдВрдЧ рдХрд╛рдо рдЧрд░реНрджреИрдЫреБред рдЙрд╣рд╛рдБрд▓реЗ рд╕рдХреНрд░рд┐рдп рд░реВрдкрдорд╛ rxjs рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред рд╕рд░реНрднрд░рдорд╛ рдбрд╛рдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдо рдЪрд┐рд╕реЛ рдереНрд░реЗрдбрдХреЛ рдЕрдкреЗрдХреНрд╖рд╛ рдЧрд░реНрдЫреБ рд░ asyncPipe рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдЯреЗрдореНрдкреНрд▓реЗрдЯрдорд╛ рдпреЛ рдереНрд░реЗрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫреБред рдпрджрд┐ рдореИрд▓реЗ рдпреЛ рдкрд╛рдЗрдк рдзреЗрд░реИ рдкрдЯрдХ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреБ рднрдиреЗ, рддреНрдпрд╕рдкрдЫрд┐, рдЪрд┐рд╕реЛ рд╕реНрдЯреНрд░рд┐рдордХреЛ рдкрд░рд┐рднрд╛рд╖рд╛рдорд╛ рдлрд░реНрдХреЗрд░, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рдЗрдкрд▓реЗ рд╕рд░реНрднрд░рдмрд╛рдЯ рдбрд╛рдЯрд╛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреЗрдЫ, рдЬреБрди рдХрдореНрддрд┐рдорд╛ рднрдиреНрдиреБ рдЕрдиреМрдареЛ рдЫред рд░ рдпрджрд┐ рдореИрд▓реЗ рдЪрд┐рд╕реЛ рдзрд╛рд░рд╛рд▓рд╛рдИ рдиреНрдпрд╛рдиреЛрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реЗрдВ рднрдиреЗ, рдЕрдиреБрд░реЛрдз рдПрдХ рдкрдЯрдХ рд╣реБрдиреЗрдЫред

рд╕рд╛рдорд╛рдиреНрдпрддрдпрд╛, рдкреНрд░рд╡рд╛рд╣рдХреЛ рдкреНрд░рдХрд╛рд░ рдмреБрдЭреНрди рд╢реБрд░реБрд╡рд╛рддрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдПрдХрджрдо рдЧрд╛рд╣реНрд░реЛ рдЫ, рддрд░ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдЫред

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ

return this.http.get(`${environment.apiUrl}/${this.apiUrl}/trade_companies`)
    .pipe(
        tap(({ data }: TradeCompanyList) => this.companies$$.next(cloneDeep(data))),
        map(({ data }: TradeCompanyList) => data)
    );

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

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - рдХреЛ

рдХреЛ рд╕рд╣рд╛рдпрдХ рдЕрдкрд░реЗрдЯрд░ рд╕рдВрдЧ рд╕реБрд░реБ рдЧрд░реМрдВред рдпрд╕рд▓реЗ рд╕рд╛рдзрд╛рд░рдг рдорд╛рдирдХреЛ рдЖрдзрд╛рд░рдорд╛ рдЕрд╡рд▓реЛрдХрдирдпреЛрдЧреНрдп рдмрдирд╛рдЙрдБрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - рдлрд┐рд▓реНрдЯрд░

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдлрд┐рд▓реНрдЯрд░ рдЕрдкрд░реЗрдЯрд░, рдирд╛рдорд▓реЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдиреНрдЫ, рд╕реНрдЯреНрд░рд┐рдо рд╕рдВрдХреЗрдд рдлрд┐рд▓реНрдЯрд░ рдЧрд░реНрджрдЫред рдпрджрд┐ рдЕрдкрд░реЗрдЯрд░ рд╕рд╣реА рдлрд░реНрдХрд╛рдЙрдБрдЫ рднрдиреЗ, рдпреЛ рдердк рдЫреЛрдбреНрдЫред

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - рд▓рд┐рдиреБрд╣реЛрд╕реН

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

take тАФ emitters рдХреЛ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдорд╛рди рд▓рд┐рдиреНрдЫ, рдЬрд╕ рдкрдЫрд┐ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫред

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - debounceTime

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

debounceTime - рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдорд╛рдирд╣рд░реВ рдЦрд╛рд░реЗрдЬ рдЧрд░реНрджрдЫ рдЬреБрди рдЖрдЙрдЯрдкреБрдЯрд╣рд░реВ рдмреАрдЪрдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕рдордп рдЕрдиреНрддрд░рд╛рд▓ рднрд┐рддреНрд░ рдкрд░реНрджрдЫ - рд╕рдордп рдЕрдиреНрддрд░рд╛рд▓ рдмрд┐рддрд┐рд╕рдХреЗрдХреЛ рдкрдЫрд┐, рдЕрдиреНрддрд┐рдо рдорд╛рди рдЙрддреНрд╕рд░реНрдЬрди рдЧрд░реНрджрдЫред

const { Observable } = Rx;
const { debounceTime, take } = RxOperators;

Observable.create((observer) => {
  let i = 1;
  observer.next(i++);
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1000╨╝╤Б
  setInterval(() => {
    observer.next(i++)
  }, 1000);

 // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1500╨╝╤Б
  setInterval(() => {
    observer.next(i++)
  }, 1500);
}).pipe(
  debounceTime(700),  // ╨Ю╨╢╨╕╨┤╨░╨╡╨╝ 700╨╝╤Б ╨╖╨╜╨░╤З╨╡╨╜╨╕╤П ╨┐╤А╨╡╨╢╨┤╨╡ ╤З╨╡╨╝ ╨╛╨▒╤А╨░╨▒╨╛╤В╨░╤В╤М
  take(3)
);  

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - takeWhile

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

takeWhile рдЧрд▓рдд рдирдЖрдПрд╕рдореНрдо рдорд╛рдирд╣рд░реВ рдЙрддреНрд╕рд░реНрдЬрди рдЧрд░реНрджрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓реЗ рдереНрд░реЗрдбрдмрд╛рдЯ рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдЧрд░реНрдЫред

const { Observable } = Rx;
const { debounceTime, takeWhile } = RxOperators;

Observable.create((observer) => {
  let i = 1;
  observer.next(i++);
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1000╨╝╤Б
  setInterval(() => {
    observer.next(i++)
  }, 1000);
}).pipe(
  takeWhile( producer =>  producer < 5 )
);  

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - рдирд╡реАрдирддрдо рд╕рдВрдпреЛрдЬрди

CombineLatest рдЕрдкрд░реЗрдЯрд░ рдХреЗрд╣рд┐ рд╣рджрд╕рдореНрдо Promise.all рд╕рдБрдЧ рдорд┐рд▓реНрджреЛрдЬреБрд▓реНрджреЛ рдЫред рдпрд╕рд▓реЗ рдзреЗрд░реИ рдереНрд░реЗрдбрд╣рд░реВрд▓рд╛рдИ рдПрдХрдорд╛ рдЬреЛрдбреНрджрдЫред рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдбрд▓реЗ рдХрдореНрддрд┐рдорд╛ рдПрдХ рдЙрддреНрд╕рд░реНрдЬрди рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореА рдПрд░реЗрдХреЛ рд░реВрдкрдорд╛ рдкреНрд░рддреНрдпреЗрдХрдмрд╛рдЯ рдирд╡реАрдирддрдо рдорд╛рдирд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВред рдпрд╕рдмрд╛рд╣реЗрдХ, рдорд░реНрдЬ рдЧрд░рд┐рдПрдХрд╛ рд╕реНрдЯреНрд░рд┐рдорд╣рд░реВрдмрд╛рдЯ рдХреБрдиреИ рдкрдирд┐ рдЙрддреНрд╕рд░реНрдЬрди рдкрдЫрд┐, рдпрд╕рд▓реЗ рдирдпрд╛рдБ рдорд╛рдирд╣рд░реВ рджрд┐рдиреЗрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

const { combineLatest, Observable } = Rx;
const { take } = RxOperators;

const observer_1 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1000╨╝╤Б
  setInterval(() => {
    observer.next('a: ' + i++);
  }, 1000);
});

const observer_2 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 750╨╝╤Б
  setInterval(() => {
    observer.next('b: ' + i++);
  }, 750);
});

combineLatest(observer_1, observer_2).pipe(take(5));

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - zip

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

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

const { zip, Observable } = Rx;
const { take } = RxOperators;

const observer_1 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1000╨╝╤Б
  setInterval(() => {
    observer.next('a: ' + i++);
  }, 1000);
});

const observer_2 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 750
  setInterval(() => {
    observer.next('b: ' + i++);
  }, 750);
});

const observer_3 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 500
  setInterval(() => {
    observer.next('c: ' + i++);
  }, 500);
});

zip(observer_1, observer_2, observer_3).pipe(take(5));

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - forkJoin

forkJoin рд▓реЗ рдереНрд░реЗрдбрд╣рд░реВ рдкрдирд┐ рдЬреЛрдбреНрдЫ, рддрд░ рд╕рдмреИ рдереНрд░реЗрдбрд╣рд░реВ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐ рдорд╛рддреНрд░ рдпрд╕рд▓реЗ рдорд╛рди рдЙрддреНрд╕рд░реНрдЬрди рдЧрд░реНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

const { forkJoin, Observable } = Rx;
const { take } = RxOperators;

const observer_1 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1000╨╝╤Б
  setInterval(() => {
    observer.next('a: ' + i++);
  }, 1000);
}).pipe(take(3));

const observer_2 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 750
  setInterval(() => {
    observer.next('b: ' + i++);
  }, 750);
}).pipe(take(5));

const observer_3 = Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 500
  setInterval(() => {
    observer.next('c: ' + i++);
  }, 500);
}).pipe(take(4));

forkJoin(observer_1, observer_2, observer_3);

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - рдирдХреНрд╕рд╛

рдирдХреНрд╕рд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЕрдкрд░реЗрдЯрд░рд▓реЗ emitter рдорд╛рдирд▓рд╛рдИ рдирдпрд╛рдБрдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг рдЧрд░реНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

const {  Observable } = Rx;
const { take, map } = RxOperators;

Observable.create((observer) => {
  let i = 1;
  // ╨Ш╤Б╨┐╤Г╤Б╨║╨░╨╡╨╝ ╨╖╨╜╨░╤З╨╡╨╜╨╕╨╡ ╤А╨░╨╖ ╨▓ 1000╨╝╤Б
  setInterval(() => {
    observer.next(i++);
  }, 1000);
}).pipe(
  map(x => x * 10),
  take(3)
);

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рдЕрдкрд░реЗрдЯрд░рд╣рд░реВ - рд╕рд╛рдЭрд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН, рдЯреНрдпрд╛рдк рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдЯреНрдпрд╛рдк рдЕрдкрд░реЗрдЯрд░рд▓реЗ рддрдкрд╛рдИрдВрд▓рд╛рдИ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯрд╣рд░реВ рдЧрд░реНрди рдЕрдиреБрдорддрд┐ рджрд┐рдиреНрдЫ, рддреНрдпреЛ рд╣реЛ, рдХреБрдиреИ рдкрдирд┐ рдХрд╛рд░реНрдпрд╣рд░реВ рдЬрд╕рд▓реЗ рдЕрдиреБрдХреНрд░рдорд▓рд╛рдИ рдЕрд╕рд░ рдЧрд░реНрджреИрдиред

рд╢реЗрдпрд░ рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдЕрдкрд░реЗрдЯрд░рд▓реЗ рдЪрд┐рд╕реЛ рдкреНрд░рд╡рд╛рд╣рд▓рд╛рдИ рддрд╛рддреЛрдорд╛ рдкрд░рд┐рдгрдд рдЧрд░реНрди рд╕рдХреНрдЫред

рдЬрд╛рднрд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯрдорд╛ рдПрд╕рд┐рдиреНрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдЩ (рдХрд▓рдмреНрдпрд╛рдХ, рд╡рд╛рджрд╛, RxJs)

рд╣рд╛рдореАрд▓реЗ рдЕрдкрд░реЗрдЯрд░рд╣рд░реВрд╕рдБрдЧ рдХрд╛рдо рдЧрд░рд┐рд╕рдХреЗрдХрд╛ рдЫреМрдВред рд╡рд┐рд╖рдпрддрд┐рд░ рдЬрд╛рдФрдВред

рдареВрд▓реЛ рд╕реНрд╡рд░рдорд╛ рд╕реЛрдЪреНрджреИ

рдЕрдирд┐ рдо рдЪрд┐рдпрд╛ рдкрд┐рдЙрди рдЧрдПрдБ ред рдо рдпреА рдЙрджрд╛рд╣рд░рдгрд╣рд░реВрдмрд╛рдЯ рдердХрд┐рдд рдЫреБ ЁЯША

рд╡рд┐рд╖рдп рдкрд░рд┐рд╡рд╛рд░

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

  • рдЕрд░реНрдХреЛ - рд╕реНрдЯреНрд░рд┐рдордорд╛ рдирдпрд╛рдБ рдбрд╛рдЯрд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг
  • рддреНрд░реБрдЯрд┐ - рддреНрд░реБрдЯрд┐ рд░ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрддрд┐
  • рдкреВрд░рд╛ - рдереНрд░реЗрдб рдХреЛ рдкреВрд░рд╛
  • рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН - рд╕реНрдЯреНрд░рд┐рдордХреЛ рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН
  • рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдЧрд░реНрдиреБрд╣реЛрд╕реН - рд╕реНрдЯреНрд░рд┐рдордмрд╛рдЯ рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдЧрд░реНрдиреБрд╣реЛрд╕реН
  • asObservable - рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг
  • рдкреНрд░рддрд┐рдЬреНрдЮрд╛ - рдПрдХ рдкреНрд░рддрд┐рдЬреНрдЮрд╛ рдорд╛ рд░реВрдкрд╛рдиреНрддрд░рдг

рддреНрдпрд╣рд╛рдБ 4 5 рдкреНрд░рдХрд╛рд░рдХрд╛ рд╡рд┐рд╖рдпрд╣рд░реВ рдЫрдиреНред

рдареВрд▓реЛ рд╕реНрд╡рд░рдорд╛ рд╕реЛрдЪреНрджреИ

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

рд╕рд░рд▓ рд╡рд┐рд╖рдп new Subject()- рд╡рд┐рд╖рдпрд╣рд░реВрдХреЛ рд╕рд░рд▓ рдкреНрд░рдХрд╛рд░ред рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдмрд┐рдирд╛ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдпреЛред рд╕рджрд╕реНрдпрддрд╛ рдкрдЫрд┐ рдорд╛рддреНрд░ рдкреНрд░рд╛рдкреНрдд рдорд╛рдирд╣рд░реВ рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрджрдЫред

рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд┐рд╖рдп new BehaviorSubject( defaultData<T> ) - рдореЗрд░реЛ рд╡рд┐рдЪрд╛рд░рдорд╛, рд╡рд┐рд╖рдпрдХреЛ рд╕рдмреИрднрдиреНрджрд╛ рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░ред рдЗрдирдкреБрдЯрд▓реЗ рдкреВрд░реНрд╡рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдорд╛рди рд▓рд┐рдиреНрдЫред рд╕рдБрдзреИ рдЕрдиреНрддрд┐рдо рдЕрдВрдХрдХреЛ рдбрд╛рдЯрд╛ рдмрдЪрдд рдЧрд░реНрджрдЫ, рдЬреБрди рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдБрджрд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реБрдиреНрдЫред рдпреЛ рд╡рд░реНрдЧрдорд╛ рдЙрдкрдпреЛрдЧреА рдорд╛рди рд╡рд┐рдзрд┐ рдкрдирд┐ рдЫ, рдЬрд╕рд▓реЗ рд╕реНрдЯреНрд░рд┐рдордХреЛ рд╣рд╛рд▓рдХреЛ рдорд╛рди рдлрд░реНрдХрд╛рдЙрдБрдЫред

рд░рд┐рдкреНрд▓реЗ рд╡рд┐рд╖рдп new ReplaySubject(bufferSize?: number, windowTime?: number) - рдЗрдирдкреБрдЯрд▓реЗ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдкрдорд╛ рдорд╛рдирд╣рд░реВрдХреЛ рдмрдлрд░рдХреЛ рдЖрдХрд╛рд░рд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рддрд░реНрдХрдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рди рд╕рдХреНрдЫ рдЬреБрди рдпрд╕рд▓реЗ рдЖрдлреИрдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░реНрдиреЗрдЫ, рд░ рджреЛрд╕реНрд░реЛ рд╕рдордпрдХреЛ рд░реВрдкрдорд╛ рдЬреБрди рд╕рдордпрдорд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд░рд┐рд╡рд░реНрддрдирд╣рд░реВ рдЪрд╛рд╣рд┐рдиреНрдЫред

AsyncSubject new AsyncSubject() - рд╕рджрд╕реНрдпрддрд╛ рд▓рд┐рдБрджрд╛ рдХреЗрд╣реА рд╣реБрдБрджреИрди, рд░ рдкреВрд░рд╛ рднрдПрдкрдЫрд┐ рдорд╛рддреНрд░ рдорд╛рди рдлрд░реНрдХрд╛рдЗрдиреЗрдЫред рд╕реНрдЯреНрд░рд┐рдордХреЛ рдЕрдиреНрддрд┐рдо рдорд╛рди рдорд╛рддреНрд░ рдлрд░реНрдХрд╛рдЗрдиреЗрдЫред

WebSocket рд╡рд┐рд╖рдп new WebSocketSubject(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>) - рдХрд╛рдЧрдЬрд╛рдд рдЙрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдореМрди рдЫ рд░ рдо рдЙрд╕рд▓рд╛рдИ рдкрд╣рд┐рд▓реЛ рдкрдЯрдХ рджреЗрдЦреНрджреИ рдЫреБред рдпрджрд┐ рдХрд╕реИрд▓рд╛рдИ рдерд╛рд╣рд╛ рдЫ рдЙрд╕рд▓реЗ рдХреЗ рдЧрд░реНрдЫ, рдХреГрдкрдпрд╛ рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН рд░ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдердкреНрдиреЗрдЫреМрдВред

рдУрдлред рдард┐рдХ рдЫ, рд╣рд╛рдореАрд▓реЗ рдЖрдЬ рддрдкрд╛рдИрд▓рд╛рдИ рднрдиреНрди рдЪрд╛рд╣реЗрдХрд╛ рд╕рдмреИ рдХреБрд░рд╛ рдХрднрд░ рдЧрд░реЗрдХрд╛ рдЫреМрдВред рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рдпреЛ рдЬрд╛рдирдХрд╛рд░реА рдЙрдкрдпреЛрдЧреА рдерд┐рдпреЛред рддрдкрд╛рдИрдВ рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА рдЯреНрдпрд╛рдмрдорд╛ рд╕рдиреНрджрд░реНрднрд╣рд░реВрдХреЛ рд╕реВрдЪреА рдЖрдлреИ рдкрдвреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рдЙрдкрдпреЛрдЧреА рдЬрд╛рдирдХрд╛рд░реА

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди