JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рд╕рд░реНрд╡рд╛рдВрдирд╛ рдирдорд╕реНрдХрд╛рд░. рд╕реЗрд░реНрдЧреЗрдИ рдУрдореЗрд▓рдирд┐рддреНрд╕реНрдХреА рд╕рдВрдкрд░реНрдХрд╛рдд рдЖрд╣реЗ. рдХрд╛рд╣реА рдХрд╛рд│рд╛рдкреВрд░реНрд╡реА рдореА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧрд╡рд░ рдПрдХ рдкреНрд░рд╡рд╛рд╣ рд╣реЛрд╕реНрдЯ рдХреЗрд▓рд╛ рд╣реЛрддрд╛, рдЬрд┐рдереЗ рдореА JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдиреАрдмрджреНрджрд▓ рдмреЛрд▓рд▓реЛ рд╣реЛрддреЛ. рдЖрдЬ рдореА рдпрд╛ рд╕рд╛рдордЧреНрд░реАрд╡рд░ рдиреЛрдЯреНрд╕ рдШреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

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

рд╕реНрдЯреЕрдХ рд╣рд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреЗ рдШрдЯрдХ рдЕрдВрддрд┐рдо-рдЗрди, рдкреНрд░рдердо-рдЖрдКрдЯ LIFO рдЖрдзрд╛рд░рд╛рд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд

рд░рд╛рдВрдЧ рд╣рд╛ рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЖрд╣реЗ рдЬреНрдпрд╛рдЪреЗ рдШрдЯрдХ рдкреНрд░рдердо-рдЗрди, рдкреНрд░рдердо-рдЖрдКрдЯ FIFO рдЖрдзрд╛рд░рд╛рд╡рд░ рдкреНрд░рд╛рдкреНрдд рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд

рдареАрдХ рдЖрд╣реЗ, рдЪрд▓рд╛ рд╕реБрд░реВ рдареЗрд╡реВрдпрд╛.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

JavaScript рд╣реА рдПрдХрд▓-рдереНрд░реЗрдбреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдЖрд╣реЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдПрдХреНрдЭрд┐рдХреНрдпреБрд╢рдирдЪрд╛ рдПрдХрдЪ рдереНрд░реЗрдб рдЖрдгрд┐ рдПрдХ рд╕реНрдЯреЕрдХ рдЖрд╣реЗ рдЬреНрдпрд╛рд╡рд░ рдлрдВрдХреНрд╢рдиреНрд╕ рдПрдХреНрдЭрд┐рдХреНрдпреВрд╢рдирд╕рд╛рдареА рд░рд╛рдВрдЧреЗрдд рдЖрд╣реЗрдд. рддреНрдпрд╛рдореБрд│реЗ, JavaScript рдПрдХрд╛ рд╡реЗрд│реА рдлрдХреНрдд рдПрдХрдЪ рдСрдкрд░реЗрд╢рди рдХрд░реВ рд╢рдХрддреЗ, рддрд░ рдЗрддрд░ рдСрдкрд░реЗрд╢рдиреНрд╕ рд╕реНрдЯреЕрдХрд╡рд░ рдХреЙрд▓ рд╣реЛрдИрдкрд░реНрдпрдВрдд рддреНрдпрд╛рдВрдЪреНрдпрд╛ рд╡рд│рдгрд╛рдЪреА рд╡рд╛рдЯ рдкрд╛рд╣рддреАрд▓.

рдХреЙрд▓ рд╕реНрдЯреЕрдХ рд╣реА рдПрдХ рдбреЗрдЯрд╛ рд╕рдВрд░рдЪрдирд╛ рдЖрд╣реЗ рдЬреА, рд╕реЛрдкреНрдпрд╛ рднрд╛рд╖реЗрдд рд╕рд╛рдВрдЧрд╛рдпрдЪреЗ рддрд░, рдЖрдкрдг рдЬрд┐рдереЗ рдЖрд╣реЛрдд рддреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреАрд▓ рдард┐рдХрд╛рдгрд╛рдЪреА рдорд╛рд╣рд┐рддреА рд░реЗрдХреЙрд░реНрдб рдХрд░рддреЗ. рдЬрд░ рдЖрдкрдг рдлрдВрдХреНрд╢рдирдордзреНрдпреЗ рдкреНрд░рд╡реЗрд╢ рдХреЗрд▓рд╛ рддрд░ рдЖрдкрдг рддреНрдпрд╛рдЪреА рдПрдВрдЯреНрд░реА рд╕реНрдЯреЕрдХрдЪреНрдпрд╛ рд╢реАрд░реНрд╖рд╕реНрдерд╛рдиреА рдврдХрд▓рддреЛ. рдЬреЗрд╡реНрд╣рд╛ рдЖрдкрдг рдлрдВрдХреНрд╢рдирдордзреВрди рдкрд░рдд рдпреЗрддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдкрдг рд╕реНрдЯреЕрдХрдордзреВрди рд╕рд░реНрд╡рд╛рдд рд╡рд░рдЪрд╛ рдШрдЯрдХ рдкреЙрдк рдХрд░рддреЛ рдЖрдгрд┐ рдЬрд┐рдереЗ рдЖрдкрдг рдлрдВрдХреНрд╢рди рдореНрд╣рдЯрд▓реЗ рд╣реЛрддреЗ рддрд┐рдереЗ рдкрд░рдд рдпреЗрддреЛ. рд╣реЗ рд╕рд░реНрд╡ рд╕реНрдЯреЕрдХ рдХрд░реВ рд╢рдХрддреЗ. рдЖрдгрд┐ рдЖрддрд╛ рдПрдХ рдЕрддреНрдпрдВрдд рдордиреЛрд░рдВрдЬрдХ рдкреНрд░рд╢реНрди. рдордЧ JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддреЗ?

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдЦрд░рдВ рддрд░, рд╕реНрдЯреЕрдХ рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рддрдерд╛рдХрдерд┐рдд WebAPI рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдмреНрд░рд╛рдЙрдЭрд░рдЪреА рдПрдХ рд╡рд┐рд╢реЗрд╖ рд░рд╛рдВрдЧ рдЖрд╣реЗ. рд╕реНрдЯреЕрдХ рдкреВрд░реНрдгрдкрдгреЗ рд╕рд╛рдл рдХреЗрд▓реНрдпрд╛рдирдВрддрд░рдЪ рдпрд╛ рд░рд╛рдВрдЧреЗрддреАрд▓ рдХрд╛рд░реНрдпреЗ рдХреНрд░рдорд╛рдиреЗ рдЪрд╛рд▓рд╡рд┐рд▓реА рдЬрд╛рддреАрд▓. рдпрд╛рдирдВрддрд░рдЪ рддреНрдпрд╛рдВрдирд╛ рд░рд╛рдВрдЧреЗрддреВрди рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рд╕реНрдЯреЕрдХрд╡рд░ рдврдХрд▓рд▓реЗ рдЬрд╛рддреЗ. рдпрд╛ рдХреНрд╖рдгреА рд╕реНрдЯреЕрдХрд╡рд░ рдХрд┐рдорд╛рди рдПрдХ рдШрдЯрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рддреЗ рд╕реНрдЯреЕрдХрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реАрдд. рд╣реЗ рдиреЗрдордХреЗ рдХрд╛рд░рдг рдЖрд╣реЗ рдХреА рдХрд╛рд▓рдмрд╛рд╣реНрдпрддреЗрдиреБрд╕рд╛рд░ рдлрдВрдХреНрд╢рди рдХреЙрд▓ рдХрд░рдгреЗ рдЕрдиреЗрдХрджрд╛ рд╡реЗрд│реЗрдд рдЕрдЪреВрдХ рдирд╕рддреЗ, рдХрд╛рд░рдг рдлрдВрдХреНрд╢рди рдкреВрд░реНрдг рднрд░рд▓реЗрд▓реЗ рдЕрд╕рддрд╛рдирд╛ рд░рд╛рдВрдЧреЗрддреВрди рд╕реНрдЯреЕрдХрдкрд░реНрдпрдВрдд рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА.

рдЪрд▓рд╛ рдЦрд╛рд▓реАрд▓ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ рдЖрдгрд┐ рддреНрдпрд╛рдЪреНрдпрд╛ рдЪрд░рдг-рджрд░-рдЪрд░рдг рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛. рдкреНрд░рдгрд╛рд▓реАрдордзреНрдпреЗ рдХрд╛рдп рд╣реЛрддреЗ рддреЗ рджреЗрдЦреАрд▓ рдкрд╛рд╣реВрдпрд╛.

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

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рез) рдЕрдЬреВрди рдХрд╛рд╣реА рдШрдбрдд рдирд╛рд╣реАрдпреЗ. рдмреНрд░рд╛рдЙрдЭрд░ рдХрдиреНрд╕реЛрд▓ рд╕реНрдкрд╖реНрдЯ рдЖрд╣реЗ, рдХреЙрд▓ рд╕реНрдЯреЕрдХ рд░рд┐рдХреНрдд рдЖрд╣реЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

2) рдирдВрддрд░ console.log('Hi') рдХрдорд╛рдВрдб рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреНрдпреЗ рдЬреЛрдбрд▓реА рдЬрд╛рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

3) рдЖрдгрд┐ рддреЗ рдкреВрд░реНрдг рд╣реЛрддреЗ

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

4) рдирдВрддрд░ console.log('рд╣рд╛рдп') рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреВрди рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реЗ рдЬрд╛рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рел) рдЖрддрд╛ setTimeout(function cb5() {тАж }) рдХрдорд╛рдВрдбрд╡рд░ рдЬрд╛. рддреЗ рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреНрдпреЗ рдЬреЛрдбрд▓реЗ рдЬрд╛рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

6) setTimeout(function cb1() {тАж }) рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ. рдмреНрд░рд╛рдЙрдЭрд░ рдПрдХ рдЯрд╛рдпрдорд░ рддрдпрд╛рд░ рдХрд░рддреЛ рдЬреЛ рд╡реЗрдм API рдЪрд╛ рднрд╛рдЧ рдЖрд╣реЗ. рддреЛ рдХрд╛рдЙрдВрдЯрдбрд╛рдЙрди рдХрд░реЗрд▓.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

7) setTimeout(function cb1() {... }) рдХрдорд╛рдВрдбрдиреЗ рддреНрдпрд╛рдЪреЗ рдХрд╛рд░реНрдп рдкреВрд░реНрдг рдХреЗрд▓реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреВрди рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реЗ рдЖрд╣реЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

8) console.log('рдмрд╛рдп') рд╣реА рдХрдорд╛рдВрдб рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреНрдпреЗ рдЬреЛрдбрд▓реА рдЬрд╛рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

9) console.log('Bye') рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рд╣реЛрддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

10) console.log('Bye') рдХрдорд╛рдВрдб рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреВрди рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реА рдЖрд╣реЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

11) рдХрд┐рдорд╛рди 5000 ms рдирд┐рдШреВрди рдЧреЗрд▓реНрдпрд╛рд╡рд░, рдЯрд╛рдЗрдорд░ рдмрдВрдж рд╣реЛрддреЛ рдЖрдгрд┐ рдХреЙрд▓рдмреЕрдХ рд░рд╛рдВрдЧреЗрдд рдХреЙрд▓рдмреЕрдХ cb1 рдареЗрд╡рддреЛ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

резреи) рдЗрд╡реНрд╣реЗрдВрдЯ рд▓реВрдк рдХреЙрд▓рдмреЕрдХ рд░рд╛рдВрдЧреЗрддреВрди рдлрдВрдХреНрд╢рди cb12 рдШреЗрддреЗ рдЖрдгрд┐ рдХреЙрд▓ рд╕реНрдЯреЕрдХрд╡рд░ рдареЗрд╡рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

13) рдлрдВрдХреНрд╢рди cb1 рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреЗрд▓реЗ рдЬрд╛рддреЗ рдЖрдгрд┐ рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреНрдпреЗ console.log('cb1') рдЬреЛрдбрддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

14) console.log('cb1') рдХрдорд╛рдВрдб рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдЭрд╛рд▓реА рдЖрд╣реЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

15) console.log('cb1') рдХрдорд╛рдВрдб рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреВрди рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реА рдЖрд╣реЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

16) рдлрдВрдХреНрд╢рди cb1 рдХреЙрд▓ рд╕реНрдЯреЕрдХрдордзреВрди рдХрд╛рдвреВрди рдЯрд╛рдХрд▓реЗ рдЖрд╣реЗ.

рдЪрд▓рд╛ рдбрд╛рдпрдиреЕрдорд┐рдХреНрд╕рдордзреАрд▓ рдЙрджрд╛рд╣рд░рдг рдкрд╛рд╣реВ:

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдмрд░рдВ, рдЖрдореНрд╣реА JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдиреА рдХрд╢реА рд▓рд╛рдЧреВ рдХреЗрд▓реА рдЬрд╛рддреЗ рддреЗ рдкрд╛рд╣рд┐рд▓реЗ. рдЖрддрд╛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдбрдЪреНрдпрд╛ рдЙрддреНрдХреНрд░рд╛рдВрддреАрдмрджреНрджрд▓ рдереЛрдбрдХреНрдпрд╛рдд рдмреЛрд▓реВрдпрд╛.

рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдбрдЪреА рдЙрддреНрдХреНрд░рд╛рдВрддреА.

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 рд╡рд╛рдкрд░реВрди рдиреЗрд╕реНрдЯреЗрдб рдЕрд╕рд┐рдВрдХреНрд░реЛрдиреА рд╕реЛрдбрд╡реВ рд╢рдХрддреЛ

рдкрдг рдЖрд╢реНрд╡рд╛рд╕рдирд╛рдВрдирд╛ рдорд░реНрдпрд╛рджрд╛ рдЕрд╕рддрд╛рдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдбрдл рд╡рд╛рдЬрд╡рд▓реНрдпрд╛рд╢рд┐рд╡рд╛рдп рд╡рдЪрди рд░рджреНрдж рдХреЗрд▓реЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдорд╣рддреНрддреНрд╡рд╛рдЪреЗ рдореНрд╣рдгрдЬреЗ рддреЗ рдПрдХрд╛ рдореВрд▓реНрдпрд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рддреЗ.

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

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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)
)

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

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

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

RxJS рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдХреНрд░рдо рд╡рд╛рдкрд░реВрди рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдЖрдгрд┐ рдЗрд╡реНрд╣реЗрдВрдЯ-рдЖрдзрд╛рд░рд┐рдд рдкреНрд░реЛрдЧреНрд░рд╛рдорд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд▓рд╛рдпрдмреНрд░рд░реА рдЖрд╣реЗ. рд▓рд╛рдпрдмреНрд░рд░реА рдореВрд▓рднреВрдд рдкреНрд░рдХрд╛рд░ рдкреНрд░рджрд╛рди рдХрд░рддреЗ рдЕрд╡рд▓реЛрдХрди рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп, рдЕрдиреЗрдХ рд╕рд╣рд╛рдпрдХ рдкреНрд░рдХрд╛рд░ (рдирд┐рд░реАрдХреНрд╖рдХ, рд╢реЗрдбреНрдпреБрд▓рд░, рд╡рд┐рд╖рдп) рдЖрдгрд┐ рд╕рдВрдХрд▓рдирд╛рдкреНрд░рдорд╛рдгреЗ рдЗрд╡реНрд╣реЗрдВрдЯрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдСрдкрд░реЗрдЯрд░ (рдирдХрд╛рд╢рд╛, рдлрд┐рд▓реНрдЯрд░, рдХрдореА, рдкреНрд░рддреНрдпреЗрдХ рдЖрдгрд┐ JavaScript рдЕреЕрд░реЗ рдордзреАрд▓ рддрддреНрд╕рдо).

рдпрд╛ рдЧреНрд░рдВрдерд╛рд▓рдпрд╛рдЪреНрдпрд╛ рдореВрд▓рднреВрдд рд╕рдВрдХрд▓реНрдкрдирд╛ рд╕рдордЬреВрди рдШреЗрдК.

рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп, рдирд┐рд░реАрдХреНрд╖рдХ, рдирд┐рд░реНрдорд╛рддрд╛

рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рд╣рд╛ рдкрд╣рд┐рд▓рд╛ рдореВрд▓рднреВрдд рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗ рдЬреНрдпрд╛рдХрдбреЗ рдЖрдкрдг рдкрд╛рд╣реВ. рдпрд╛ рд╡рд░реНрдЧрд╛рдордзреНрдпреЗ RxJs рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪрд╛ рдореБрдЦреНрдп рднрд╛рдЧ рдЖрд╣реЗ. рд╣реЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдкреНрд░рд╡рд╛рд╣рд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЖрд╣реЗ, рдЬреНрдпрд╛рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ.

рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЕрджреНрдпрддрдиреЗ рддрдпрд╛рд░ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рд╕рд╣рд╛рдпреНрдпрдХ рдпрдВрддреНрд░рдгрд╛ рд▓рд╛рдЧреВ рдХрд░рддреЗ, рддрдерд╛рдХрдерд┐рдд рдирд┐рд░реАрдХреНрд╖рдХ. рдирд┐рд░реАрдХреНрд╖рдХрд╛рд╕рд╛рдареА рдореВрд▓реНрдпрд╛рдВрдЪрд╛ рд╕реНрддреНрд░реЛрдд рдореНрд╣рдгрддрд╛рдд рдЙрддреНрдкрд╛рджрдХ. рд╣реЗ рдЕреЕрд░реЗ, рдЗрдЯрд░реЗрдЯрд░, рд╡реЗрдм рд╕реЙрдХреЗрдЯ, рдХрд╛рд╣реА рдкреНрд░рдХрд╛рд░рдЪреЗ рдЗрд╡реНрд╣реЗрдВрдЯ рдЗрддреНрдпрд╛рджреА рдЕрд╕реВ рд╢рдХрддреЗ. рдореНрд╣рдгреВрди рдЖрдкрдг рдЕрд╕реЗ рдореНрд╣рдгреВ рд╢рдХрддреЛ рдХреА рдирд┐рд░реНрдорд╛рддреЗ рдЖрдгрд┐ рдирд┐рд░реАрдХреНрд╖рдХ рдпрд╛рдВрдЪреНрдпрд╛рддреАрд▓ рдкреНрд░реЗрдХреНрд╖рдгреАрдп рд╡рд╛рд╣рдХ рдЖрд╣реЗ.

рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рддреАрди рдкреНрд░рдХрд╛рд░рдЪреЗ рдирд┐рд░реАрдХреНрд╖рдХ рдЗрд╡реНрд╣реЗрдВрдЯ рд╣рд╛рддрд╛рд│рддреЗ:

  • рдкреБрдвреАрд▓ - рдирд╡реАрди рдбреЗрдЯрд╛
  • рддреНрд░реБрдЯреА тАУ рдЕрдкрд╡рд╛рджрд╛рдореБрд│реЗ рдХреНрд░рдо рд╕рдорд╛рдкреНрдд рдЭрд╛рд▓реНрдпрд╛рд╕ рддреНрд░реБрдЯреА. рд╣реА рдШрдЯрдирд╛ рдХреНрд░рдо рдкреВрд░реНрдг рдХрд░рдгреЗ рджреЗрдЦреАрд▓ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ.
  • рдкреВрд░реНрдг тАФ рдХреНрд░рдо рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рдмрджреНрджрд▓рдЪреЗ рд╕рдВрдХреЗрдд. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЖрдгрдЦреА рдирд╡реАрди рдбреЗрдЯрд╛ рдорд┐рд│рдгрд╛рд░ рдирд╛рд╣реА.

рдЪрд▓рд╛ рдбреЗрдореЛ рдкрд╛рд╣реВ:

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рд╕реБрд░реБрд╡рд╛рддреАрд▓рд╛ рдЖрдкрдг 1, 2, 3 рдЖрдгрд┐ 1 рд╕реЗрдХрдВрджрд╛рдирдВрддрд░ рдореВрд▓реНрдпрд╛рдВрд╡рд░ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд░реВ. рдЖрдореНрд╣рд╛рд▓рд╛ 4 рдорд┐рд│реЗрд▓ рдЖрдгрд┐ рдЖрдордЪрд╛ рдкреНрд░рд╡рд╛рд╣ рд╕рдВрдкреБрд╖реНрдЯрд╛рдд рдпреЗрдИрд▓.

рдореЛрдареНрдпрд╛рдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ

рдЖрдгрд┐ рдордЧ рдорд╛рдЭреНрдпрд╛ рд▓рдХреНрд╖рд╛рдд рдЖрд▓реЗ рдХреА рддреНрдпрд╛рдмрджреНрджрд▓ рд▓рд┐рд╣рд┐рдгреНрдпрд╛рдкреЗрдХреНрд╖рд╛ рддреЗ рд╕рд╛рдВрдЧрдгреЗ рдЕрдзрд┐рдХ рдордиреЛрд░рдВрдЬрдХ рдЖрд╣реЗ. ЁЯША

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

рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдПрдЦрд╛рджреНрдпрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддреЛ рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рдПрдХ рдирд╡реАрди рд╡рд░реНрдЧ рддрдпрд╛рд░ рдХрд░рддреЛ рд╕рджрд╕реНрдпрддрд╛рдЬреЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рджреЗрддреЗ рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рд╛. рдЖрдореНрд╣реА рдкрджреНрдзрдд рд╡рд╛рдкрд░реВрди рд╕рджрд╕реНрдпрддреНрд╡ рдЧрдЯ рджреЗрдЦреАрд▓ рдХрд░реВ рд╢рдХрддреЛ рдЬреЛрдбрд╛. рдмрд░рдВ, рд╣реЗ рддрд░реНрдХрд╕рдВрдЧрдд рдЖрд╣реЗ рдХреА рдЖрдкрдг рд╡рд╛рдкрд░реВрди рдереНрд░реЗрдбреНрд╕рдЪреЗ рдЧрдЯ рд░рджреНрдж рдХрд░реВ рд╢рдХрддреЛ рджреВрд░. рдЬреЛрдбрд╛ рдЖрдгрд┐ рдХрд╛рдвреВрди рдЯрд╛рдХрдгреНрдпрд╛рдЪреНрдпрд╛ рдкрджреНрдзрддреА рдЗрдирдкреБрдЯ рдореНрд╣рдгреВрди рджреБрд╕рд░реА рд╕рджрд╕реНрдпрддрд╛ рд╕реНрд╡реАрдХрд╛рд░рддрд╛рдд. рдореА рд╣реЗ рд▓рдХреНрд╖рд╛рдд рдШреЗрдК рдЗрдЪреНрдЫрд┐рддреЛ рдХреА рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╕рджрд╕реНрдпрддреНрд╡ рд░рджреНрдж рдХрд░рддреЛ, рддреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╕рд░реНрд╡ рдореБрд▓рд╛рдВрдЪреЗ рд╕рджрд╕реНрдпрддреНрд╡ рд░рджреНрдж рдХрд░рддреЛ рдЬрдгреВ рддреНрдпрд╛рдВрдиреА рд╕рджрд╕реНрдпрддреНрд╡ рд░рджреНрдж рдХрд░рдгреНрдпрд╛рдЪреА рдкрджреНрдзрдд рдореНрд╣рдЯрд▓реЗ рдЖрд╣реЗ. рдкреБрдвреЗ рдЬрд╛.

рдкреНрд░рд╡рд╛рд╣рд╛рдВрдЪреЗ рдкреНрд░рдХрд╛рд░

рдЧрд░рдо
рд╢реАрддрд▓

рдирд┐рд░реНрдорд╛рддрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдмрд╛рд╣реЗрд░ рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ
рдирд┐рд░реНрдорд╛рддрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдЖрдд рддрдпрд╛рд░ рдХреЗрд▓рд╛ рдЬрд╛рддреЛ

рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рддрдпрд╛рд░ рдХреЗрд▓реНрдпрд╛рд╡рд░ рдбреЗрдЯрд╛ рд╣рд╕реНрддрд╛рдВрддрд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ
рд╕рдмрд╕реНрдХреНрд░рд┐рдкреНрд╢рдирдЪреНрдпрд╛ рд╡реЗрд│реА рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХреЗрд▓рд╛ рдЬрд╛рддреЛ

рд╕рджрд╕реНрдпрддреНрд╡ рд░рджреНрдж рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ
рдзрд╛рдЧрд╛ рд╕реНрд╡рддрдГрдЪ рд╕рдВрдкрддреЛ

рдПрдХ-рддреЗ-рдЕрдиреЗрдХ рд╕рдВрдмрдВрдз рд╡рд╛рдкрд░рддреЗ
рд╡рди рдЯреВ рд╡рди рд░рд┐рд▓реЗрд╢рдирд╢рд┐рдк рд╡рд╛рдкрд░рддреЗ

рд╕рд░реНрд╡ рд╕рджрд╕реНрдпрддрд╛рдВрдЪрд╛ рдПрдХрдЪ рдЕрд░реНрде рдЖрд╣реЗ
рд╕рджрд╕реНрдпрддрд╛ рд╕реНрд╡рддрдВрддреНрд░ рдЖрд╣реЗрдд

рддреБрдордЪреНрдпрд╛рдХрдбреЗ рд╕рджрд╕реНрдпрддреНрд╡ рдирд╕рд▓реНрдпрд╛рд╕ рдбреЗрдЯрд╛ рдЧрдорд╛рд╡рд▓рд╛ рдЬрд╛рдК рд╢рдХрддреЛ
рдирд╡реАрди рд╕рджрд╕реНрдпрддреНрд╡рд╛рд╕рд╛рдареА рд╕рд░реНрд╡ рдкреНрд░рд╡рд╛рд╣ рдореВрд▓реНрдпреЗ рдкреБрдиреНрд╣рд╛ рдЬрд╛рд░реА рдХрд░рддреЗ

рдПрдХ рд╕рд╛рдзрд░реНрдореНрдп рджреНрдпрд╛рдпрдЪреЗ рддрд░, рдореА рдерд┐рдПрдЯрд░рдордзреАрд▓ рдЪрд┐рддреНрд░рдкрдЯ рдореНрд╣рдгреВрди рдЧрд░рдо рдкреНрд░рд╡рд╛рд╣рд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрди. рддреБрдореНрд╣реА рдХреЛрдгрддреНрдпрд╛ рд╡реЗрд│реА рдкреЛрд╣реЛрдЪрд▓рд╛рдд, рддреНрдпрд╛ рдХреНрд╖рдгрд╛рдкрд╛рд╕реВрди рддреБрдореНрд╣реА рдкрд╛рд╣рдгреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА. рдореА рд╢реАрдд рдкреНрд░рд╡рд╛рд╣рд╛рдЪреА рддреБрд▓рдирд╛ рддрдВрддреНрд░рдЬреНрдЮрд╛рдирд╛рддреАрд▓ рдХреЙрд▓рд╢реА рдХрд░реЗрди. рд╕рдорд░реНрдерди рдХреЛрдгрддрд╛рд╣реА рдХреЙрд▓рд░ рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рд╡реНрд╣реЙрдЗрд╕рдореЗрд▓ рд░реЗрдХреЙрд░реНрдбрд┐рдВрдЧ рдРрдХрддреЛ, рдкрд░рдВрддреБ рддреБрдореНрд╣реА рд╕рджрд╕реНрдпрддреНрд╡ рд░рджреНрдж рдХрд░реВрди рд╣рдБрдЧ рдЕрдк рдХрд░реВ рд╢рдХрддрд╛.

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

рдореА рдЕрдБрдЧреБрд▓рд░ рд╕реЛрдмрдд рдХрд╛рдо рдХрд░рдд рдЖрд╣реЗ. рддреЛ рд╕рдХреНрд░рд┐рдпрдкрдгреЗ 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)
    );

рдСрдкрд░реЗрдЯрд░ рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдВрд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд╡рд╛рдврд╡рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛рдд. рддреЗ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рдШрдЯрдирд╛рдВрд╡рд░ рдирд┐рдпрдВрддреНрд░рдг рдареЗрд╡рдгреНрдпрд╛рд╕ рдорджрдд рдХрд░рддрд╛рдд. рдЖрдореНрд╣реА рдХрд╛рд╣реА рд╕рд░реНрд╡рд╛рдд рд▓реЛрдХрдкреНрд░рд┐рдп рдкрд╛рд╣реВ, рдЖрдгрд┐ рдСрдкрд░реЗрдЯрд░рдмрджреНрджрд▓ рдЕрдзрд┐рдХ рддрдкрд╢реАрд▓ рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреАрдордзреАрд▓ рджреБрд╡реЗ рд╡рд╛рдкрд░реВрди рдЖрдврд│реВ рд╢рдХрддрд╛рдд.

рдСрдкрд░реЗрдЯрд░ - рдЪреНрдпрд╛

рдЪреНрдпрд╛ рд╕рд╣рд╛рдпреНрдпрдХ рдСрдкрд░реЗрдЯрд░рд╕рд╣ рдкреНрд░рд╛рд░рдВрдн рдХрд░реВрдпрд╛. рд╣реЗ рдПрдХрд╛ рд╕рд╛рдзреНрдпрд╛ рдореВрд▓реНрдпрд╛рд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдгреНрдпрд╛рдпреЛрдЧреНрдп рддрдпрд╛рд░ рдХрд░рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - рдлрд┐рд▓реНрдЯрд░

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдлрд┐рд▓реНрдЯрд░ рдСрдкрд░реЗрдЯрд░, рдирд╛рд╡рд╛рдкреНрд░рдорд╛рдгреЗрдЪ, рдкреНрд░рд╡рд╛рд╣ рд╕рд┐рдЧреНрдирд▓ рдлрд┐рд▓реНрдЯрд░ рдХрд░рддреЛ. рдСрдкрд░реЗрдЯрд░ рдЦрд░реЗ рдкрд░рдд рдЖрд▓реНрдпрд╛рд╕, рддреЛ рдкреБрдвреЗ рд╡рдЧрд│рддреЛ.

рдСрдкрд░реЗрдЯрд░ - рдШреНрдпрд╛

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

take тАФ рдЙрддреНрд╕рд░реНрдЬрдХрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдЪреЗ рдореВрд▓реНрдп рдШреЗрддреЗ, рдЬреНрдпрд╛рдирдВрддрд░ рдзрд╛рдЧрд╛ рд╕рдВрдкрддреЛ.

рдСрдкрд░реЗрдЯрд░ - debounceTime

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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)
);  

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - takeWhile

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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 )
);  

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - рдирд╡реАрдирддрдо рдПрдХрддреНрд░ рдХрд░рд╛

combineLatest рдСрдкрд░реЗрдЯрд░ рдХрд╛рд╣реАрд╕реЗ promise.all рд╕рд╛рд░рдЦреЗ рдЖрд╣реЗ. рд╣реЗ рдПрдХрд╛рдордзреНрдпреЗ рдЕрдиреЗрдХ рдзрд╛рдЧреЗ рдПрдХрддреНрд░ рдХрд░рддреЗ. рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдбрдиреЗ рдХрд┐рдорд╛рди рдПрдХ рдЙрддреНрд╕рд░реНрдЬрди рдХреЗрд▓реНрдпрд╛рдирдВрддрд░, рдЖрдореНрд╣рд╛рд▓рд╛ рдкреНрд░рддреНрдпреЗрдХрд╛рдХрдбреВрди рдЕреЕрд░реЗрдЪреНрдпрд╛ рд╕реНрд╡рд░реВрдкрд╛рдд рдирд╡реАрдирддрдо рдореВрд▓реНрдпреЗ рдорд┐рд│рддрд╛рдд. рдкреБрдвреЗ, рд╡рд┐рд▓реАрди рдЭрд╛рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рд╡рд╛рд╣рд╛рдВрдордзреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЙрддреНрд╕рд░реНрдЬрдирд╛рдирдВрддрд░, рддреЗ рдирд╡реАрди рдореВрд▓реНрдпреЗ рджреЗрдИрд▓.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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));

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - рдЬрд┐.рдк

рдЭрд┐рдк - рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдбрдордзреАрд▓ рдореВрд▓реНрдпрд╛рдЪреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддреЗ рдЖрдгрд┐ рдпрд╛ рдореВрд▓реНрдпрд╛рдВрд╡рд░ рдЖрдзрд╛рд░рд┐рдд рдЕреЕрд░реЗ рддрдпрд╛рд░ рдХрд░рддреЗ. рдЬрд░ рдХреЛрдгрддреНрдпрд╛рд╣реА рдзрд╛рдЧреНрдпрд╛рддреВрди рдореВрд▓реНрдп рдпреЗрдд рдирд╕реЗрд▓ рддрд░ рдЧрдЯ рддрдпрд╛рд░ рд╣реЛрдгрд╛рд░ рдирд╛рд╣реА.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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));

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - forkJoin

forkJoin рджреЗрдЦреАрд▓ рдереНрд░реЗрдбреНрд╕рдордзреНрдпреЗ рд╕рд╛рдореАрд▓ рд╣реЛрддреЗ, рдкрд░рдВрддреБ рд╕рд░реНрд╡ рдереНрд░реЗрдбреНрд╕ рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рд╡рд░рдЪ рддреЗ рдореВрд▓реНрдп рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддреЗ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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);

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - рдирдХрд╛рд╢рд╛

рдореЕрдк рдЯреНрд░рд╛рдиреНрд╕рдлреЙрд░реНрдореЗрд╢рди рдСрдкрд░реЗрдЯрд░ рдПрдорд┐рдЯрд░ рд╡реНрд╣реЕрд▓реНрдпреВрд▓рд╛ рдирд╡реАрдирдордзреНрдпреЗ рдмрджрд▓рддреЛ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, 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)
);

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдСрдкрд░реЗрдЯрд░ - рд╢реЗрдЕрд░ рдХрд░рд╛, рдЯреЕрдк рдХрд░рд╛

рдЯреЕрдк рдСрдкрд░реЗрдЯрд░ рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд╛рдЗрдб рдЗрдлреЗрдХреНрдЯреНрд╕ рдХрд░рдгреНрдпрд╛рдЪреА рдкрд░рд╡рд╛рдирдЧреА рджреЗрддреЛ, рдореНрд╣рдгрдЬреЗ, рдХреЛрдгрддреНрдпрд╛рд╣реА рдХреНрд░рд┐рдпрд╛ рдЬреНрдпрд╛ рдЕрдиреБрдХреНрд░рдорд╛рдВрд╡рд░ рдкрд░рд┐рдгрд╛рдо рдХрд░рдд рдирд╛рд╣реАрдд.

рд╢реЗрдЕрд░ рдпреБрдЯрд┐рд▓рд┐рдЯреА рдСрдкрд░реЗрдЯрд░ рдердВрдб рдкреНрд░рд╡рд╛рд╣рд╛рд▓рд╛ рдЧрд░рдо рдордзреНрдпреЗ рдмрджрд▓реВ рд╢рдХрддреЛ.

JavaScript рдордзреНрдпреЗ рдЕрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ (рдХреЙрд▓рдмреЕрдХ, рдкреНрд░реЙрдорд┐рд╕, RxJs)

рдЖрдореНрд╣реА рдСрдкрд░реЗрдЯрд░реНрд╕рд╕рд╣ рдкреВрд░реНрдг рдХреЗрд▓реЗ. рдЪрд▓рд╛ рд╡рд┐рд╖рдпрд╛рдХрдбреЗ рдЬрд╛рдКрдпрд╛.

рдореЛрдареНрдпрд╛рдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ

рдЖрдгрд┐ рдордЧ рдЪрд╣рд╛ рдкреНрдпрд╛рдпрд▓рд╛ рдЧреЗрд▓реЛ. рдореА рдпрд╛ рдЙрджрд╛рд╣рд░рдгрд╛рдВрдиреА рдХрдВрдЯрд╛рд│рд▓реЛ рдЖрд╣реЗ ЁЯША

рд╡рд┐рд╖рдп рдХреБрдЯреБрдВрдм

рд╡рд┐рд╖рдп рдХреБрдЯреБрдВрдм рд╣реЗ рдЧрд░рдо рдкреНрд░рд╡рд╛рд╣рд╛рдЪреЗ рдкреНрд░рдореБрдЦ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ. рд╣реЗ рд╡рд░реНрдЧ рдПрдХ рдкреНрд░рдХрд╛рд░рдЪреЗ рд╕рдВрдХрд░рд┐рдд рдЖрд╣реЗрдд рдЬреЗ рдПрдХрд╛рдЪ рд╡реЗрд│реА рдирд┐рд░реАрдХреНрд╖рдг рдЖрдгрд┐ рдирд┐рд░реАрдХреНрд╖рдХ рдореНрд╣рдгреВрди рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд. рд╡рд┐рд╖рдп рд╣рд╛ рдЪрд░реНрдЪреЗрдЪрд╛ рдзрд╛рдЧрд╛ рдЕрд╕рд▓реНрдпрд╛рдиреЗ рддреНрдпрд╛рдЪреЗ рд╕рджрд╕реНрдпрддреНрд╡ рд░рджреНрдж рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЬрд░ рдЖрдкрдг рдореБрдЦреНрдп рдкрджреНрдзрддреАрдВрдмрджреНрджрд▓ рдмреЛрд▓рд▓реЛ рддрд░ рдпрд╛ рдЖрд╣реЗрдд:

  • рдкреБрдвреАрд▓ - рдкреНрд░рд╡рд╛рд╣рд╛рдд рдирд╡реАрди рдбреЗрдЯрд╛рдЪреЗ рд╣рд╕реНрддрд╛рдВрддрд░рдг
  • рддреНрд░реБрдЯреА - рддреНрд░реБрдЯреА рдЖрдгрд┐ рдереНрд░реЗрдб рд╕рдорд╛рдкреНрддреА
  • рдкреВрд░реНрдг - рдереНрд░реЗрдб рдкреВрд░реНрдг рдХрд░рдгреЗ
  • рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛ - рдкреНрд░рд╡рд╛рд╣рд╛рдЪреА рд╕рджрд╕реНрдпрддрд╛ рдШреНрдпрд╛
  • рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рд╛ - рдкреНрд░рд╡рд╛рд╣рд╛рддреВрди рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж рдХрд░рд╛
  • asObservable - рдирд┐рд░реАрдХреНрд╖рдХрд╛рдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рд╛
  • to Promise - рд╡рдЪрдирд╛рдд рд░реВрдкрд╛рдВрддрд░рд┐рдд рд╣реЛрддреЗ

рд╡рд┐рд╖рдпрд╛рдВрдЪреЗ рекрел рдкреНрд░рдХрд╛рд░ рдЖрд╣реЗрдд.

рдореЛрдареНрдпрд╛рдиреЗ рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреЗ

рдкреНрд░рд╡рд╛рд╣рд╛рд╡рд░ 4 рд▓реЛрдХ рдмреЛрд▓рдд рд╣реЛрддреЗ, рдкрд░рдВрддреБ рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рддреНрдпрд╛рдВрдиреА рдЖрдгрдЦреА рдПрдХрд╛рдЪреА рднрд░ рдШрд╛рддрд▓реА. рдЬрд╕реЗ рддреЗ рдореНрд╣рдгрддрд╛рдд, рдЬрдЧрд╛ рдЖрдгрд┐ рд╢рд┐рдХрд╛.

рд╕рд╛рдзрд╛ рд╡рд┐рд╖рдп new Subject()- рд╡рд┐рд╖рдпрд╛рдВрдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдкреНрд░рдХрд╛рд░. рдкреЕрд░рд╛рдореАрдЯрд░реНрд╕рд╢рд┐рд╡рд╛рдп рддрдпрд╛рд░ рдХреЗрд▓реЗ. рд╕рджрд╕реНрдпрддрд╛ рдШреЗрддрд▓реНрдпрд╛рдирдВрддрд░рдЪ рдкреНрд░рд╛рдкреНрдд рдЭрд╛рд▓реЗрд▓реА рдореВрд▓реНрдпреЗ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХрд░рддреЗ.

рд╡рд░реНрддрди рд╡рд┐рд╖рдп new BehaviorSubject( defaultData<T> ) - рдорд╛рдЭреНрдпрд╛ рдорддреЗ, рд╡рд┐рд╖рдпрд╛рдЪрд╛ рд╕рд░реНрд╡рд╛рдд рд╕рд╛рдорд╛рдиреНрдп рдкреНрд░рдХрд╛рд░. рдЗрдирдкреБрдЯ рдбреАрдлреЙрд▓реНрдЯ рдореВрд▓реНрдп рдШреЗрддреЗ. рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдЕрдВрдХрд╛рдЪрд╛ рдбреЗрдЯрд╛ рдиреЗрд╣рдореА рдЬрддрди рдХрд░рддреЛ, рдЬреЛ рд╕рджрд╕реНрдпрддреНрд╡ рдШреЗрдд рдЕрд╕рддрд╛рдирд╛ рдкреНрд░рд╕рд╛рд░рд┐рдд рдХреЗрд▓рд╛ рдЬрд╛рддреЛ. рдпрд╛ рд╡рд░реНрдЧрд╛рдордзреНрдпреЗ рдПрдХ рдЙрдкрдпреБрдХреНрдд рдореВрд▓реНрдп рдкрджреНрдзрдд рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рдЬреА рдкреНрд░рд╡рд╛рд╣рд╛рдЪреЗ рд╡рд░реНрддрдорд╛рди рдореВрд▓реНрдп рдкрд░рдд рдХрд░рддреЗ.

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

AsyncSubject new AsyncSubject() тАФ рд╕рджрд╕реНрдпрддреНрд╡ рдШреЗрддрд╛рдирд╛ рдХрд╛рд╣реАрд╣реА рд╣реЛрдд рдирд╛рд╣реА рдЖрдгрд┐ рдореВрд▓реНрдп рдкреВрд░реНрдг рдЭрд╛рд▓реНрдпрд╛рд╡рд░рдЪ рдкрд░рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓. рдкреНрд░рд╡рд╛рд╣рд╛рдЪреЗ рдлрдХреНрдд рд╢реЗрд╡рдЯрдЪреЗ рдореВрд▓реНрдп рдкрд░рдд рдХреЗрд▓реЗ рдЬрд╛рдИрд▓.

рд╡реЗрдмрд╕реЙрдХреЗрдЯ рд╡рд┐рд╖рдп new WebSocketSubject(urlConfigOrSource: string | WebSocketSubjectConfig<T> | Observable<T>, destination?: Observer<T>) - рджрд╕реНрддрдРрд╡рдЬреАрдХрд░рдг рддреНрдпрд╛рдЪреНрдпрд╛рдмрджреНрджрд▓ рд╢рд╛рдВрдд рдЖрд╣реЗ рдЖрдгрд┐ рдореА рддреНрдпрд╛рд▓рд╛ рдкреНрд░рдердордЪ рдкрд╛рд╣рдд рдЖрд╣реЗ. рддреЛ рдХрд╛рдп рдХрд░рддреЛ рд╣реЗ рдХреЛрдгрд╛рд▓рд╛ рдорд╛рд╣реАрдд рдЕрд╕рд▓реНрдпрд╛рд╕, рдХреГрдкрдпрд╛ рд▓рд┐рд╣рд╛ рдЖрдгрд┐ рдЖрдореНрд╣реА рддреЗ рдЬреЛрдбреВ.

рдУрдл. рдмрд░рдВ, рдЖрдЬ рдореА рддреБрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧреВ рдЗрдЪреНрдЫрд┐рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╕рд░реНрд╡ рдЧреЛрд╖реНрдЯреА рдЖрдореНрд╣реА рдХрд╡реНрд╣рд░ рдХреЗрд▓реНрдпрд╛ рдЖрд╣реЗрдд. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рд╣реА рдорд╛рд╣рд┐рддреА рдЙрдкрдпреБрдХреНрдд рд╣реЛрддреА. рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреА рдЯреЕрдмрдордзреНрдпреЗ рддреБрдореНрд╣реА рд╕реНрд╡рддрдГ рд╕рдВрджрд░реНрднрд╛рдВрдЪреА рдпрд╛рджреА рд╡рд╛рдЪреВ рд╢рдХрддрд╛.

рдЙрдкрдпреБрдХреНрдд рдорд╛рд╣рд┐рддреА

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

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЬреЛрдбрд╛