рднрд╛рдЧ 1. рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдкреНрд░рд╡рд╛рд╣
рд▓реЗрдЦреЛрдВ рдХреА рдпрд╣ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдЖрд░рдПрдХреНрд╕рдЬреЗрдПрд╕ рдЬреИрд╕реЗ рдЕрджреНрднреБрдд рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬреЗрдПрд╕ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред
рд▓реЗрдЦреЛрдВ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ "RxJS рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдХреЗ рдореВрд▓ рддрддреНрд╡":
рдпрд╣ рд▓реЗрдЦ рдХрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣реИ : рдореВрд▓ рд░реВрдк рд╕реЗ, рдпрд╣рд╛рдВ рдореИрдВ рдореВрд▓ рдмрд╛рддреЛрдВ рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░реВрдВрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕ рддрдХрдиреАрдХ рдореЗрдВ рд╢реБрд░реБрдЖрддреА рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд▓реЗрдЦ рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рд╣реИред рдЙрд╕реА рд╕рдордп, рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдиреБрднрд╡реА рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреЗред рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП js (es5 / es6) рдХреЗ рдЬреНрдЮрд╛рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдкреНрд░реЗрд░рдгрд╛ : рдореИрдВрдиреЗ рдкрд╣рд▓реА рдмрд╛рд░ RxJS рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рдЬрдм рдореИрдВрдиреЗ рдХреЛрдгреАрдп рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдпрд╣ рддрдм рдерд╛ рдЬрдм рдореБрдЭреЗ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рддрдВрддреНрд░ рдХреЛ рд╕рдордЭрдиреЗ рдореЗрдВ рдХрдард┐рдирд╛рдИ рд╣реБрдИред рдЗрд╕ рддрдереНрдп рд╕реЗ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдХрд┐ рдореЗрд░реЗ рдХрд╛рдо рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рд╕рдордп рдЕрдзрд┐рдХрд╛рдВрд╢ рд▓реЗрдЦ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рдкреБрд░рд╛рдиреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдкрд┐рдд рдереЗред рдореБрдЭреЗ рдХрдо рд╕реЗ рдХрдо рдХреБрдЫ рд╕рдордЭрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд╕реНрддрд╛рд╡реЗрдЬ, рд╡рд┐рднрд┐рдиреНрди рдореИрдиреБрдЕрд▓ рдкрдврд╝рдиреЗ рдкрдбрд╝реЗред рдФрд░ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рд╣реА рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛрдиреЗ рд▓рдЧрд╛ рдХрд┐ рдХреИрд╕реЗ "рд╕рдм рдХреБрдЫ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рд╣реИ"ред рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рдЬреАрд╡рди рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдЕрд▓рдорд╛рд░рд┐рдпреЛрдВ рдкрд░ рд░рдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред
рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреНрдпрд╛ рд╣реИ?
рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рд╕рд╛рдорд╛рдиреНрдп рд╢рдмреНрдж рдХрд╛ рдЙрддреНрддрд░ рдЦреЛрдЬрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИред рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ: рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХрд┐рд╕реА рднреА рдкрд░рд┐рд╡рд░реНрддрди рдХрд╛ рдЬрд╡рд╛рдм рджреЗрдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рдХрд┐рди рдмрджрд▓рд╛рд╡реЛрдВ рдХреА рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ? рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
let a = 2; let b = 3; let sum = a + b; console.log(sum);
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдЪрд┐рдд рдЕрдирд┐рд╡рд╛рд░реНрдп рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред рдЕрдирд┐рд╡рд╛рд░реНрдп рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЗ рд╡рд┐рдкрд░реАрдд, рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдкреБрд╢ рдкрд░рд┐рд╡рд░реНрддрди рдкреНрд░рд╕рд╛рд░ рд░рдгрдиреАрддрд┐рдпреЛрдВ рдкрд░ рдмрдирд╛рддрд╛ рд╣реИред рдкреБрд╢ рд░рдгрдиреАрддрд┐ рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпреЗ рд╕рдорд╛рди рдкрд░рд┐рд╡рд░реНрддрди "рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ" рдзрдХреЗрд▓ рджрд┐рдП рдЬрд╛рдПрдВрдЧреЗ, рдФрд░ рдЙрди рдкрд░ рдирд┐рд░реНрднрд░ рдбреЗрдЯрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдбреЗрдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдпрд╣рд╛рдВ рдПрдХ рдзрдХреНрдХрд╛ рд░рдгрдиреАрддрд┐ рд▓рд╛рдЧреВ рд╣реЛрдиреЗ рдкрд░ рд╣рдорд╛рд░рд╛ рдЙрджрд╛рд╣рд░рдг рдХреИрд╕рд╛ рд╣реЛрдЧрд╛:
let a = 2; let b = 3; let sum = a + b; console.log(sum);
рдпрд╣ рдЙрджрд╛рд╣рд░рдг рдПрдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рджрд┐рдЦрд╛рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХрддрд╛ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдЗрд╕реЗ рдХреЗрд╡рд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдореЗрдВ рдЕрдВрддрд░ рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдпрд╛ рдерд╛ред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдХреЛрдб рдмрд╣реБрдд рдЕрд▓рдЧ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛, рдФрд░ рдЕрднреНрдпрд╛рд╕ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рдХреЗ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдШрдЯрдХ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред
рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо
рдпрджрд┐ рдЖрдк рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рдкрд░ "рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ" рд╢рдмреНрдж рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рд╕рд╛рдЗрдЯ рд╣рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрд░рд┐рднрд╛рд╖рд╛ рджреЗрдЧреА: "рд░рд┐рдПрдХреНрдЯрд┐рд╡ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдкреНрд░рддрд┐рдорд╛рди рд╣реИ рдЬреЛ рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдФрд░ рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдкрд░ рдХреЗрдВрджреНрд░рд┐рдд рд╣реИред" рдЗрд╕ рдкрд░рд┐рднрд╛рд╖рд╛ рд╕реЗ, рд╣рдо рдпрд╣ рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓рддрд╛ рджреЛ рдореБрдЦреНрдп "рд╡реНрд╣реЗрд▓" рдкрд░ рдЖрдзрд╛рд░рд┐рдд рд╣реИред рдореИрдВрдиреЗ рдЙрдкрд░реЛрдХреНрдд рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рд╡рд┐рддрд░рдг рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЖрдЧреЗ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдбреЗрдЯрд╛ рд╕реНрдЯреНрд░реАрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдмрд╛рдд рдХрд░рдиреА рдЪрд╛рд╣рд┐рдПред рдЖрдЗрдП рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ:
const input = document.querySelector('input');
рд╣рдо рдХреАрдк рдИрд╡реЗрдВрдЯ рдХреЛ рд╕реБрдирддреЗ рд╣реИрдВ рдФрд░ рдИрд╡реЗрдВрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдЕрдкрдиреЗ рдПрд░реЗ рдореЗрдВ рд░рдЦрддреЗ рд╣реИрдВред рд╕рдордп рдХреЗ рд╕рд╛рде, рд╣рдорд╛рд░реЗ рд╕рд░рдгреА рдореЗрдВ рд╣рдЬрд╛рд░реЛрдВ KeyboardEvent рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╣рдорд╛рд░реЗ рд╕рд░рдгреА рдХреЛ рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдмрд╛рдж рдХреА рдШрдЯрдирд╛рдУрдВ рдХрд╛ рд╕реВрдЪрдХрд╛рдВрдХ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕реВрдЪрдХрд╛рдВрдХ рд╕реЗ рдЕрдзрд┐рдХ рд╣реИред рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд╕рд░рдгреА рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдбреЗрдЯрд╛ рдкреНрд░рд╡рд╛рд╣ рдореЙрдбрд▓ рд╣реИред рд╕рд░рд▓реАрдХреГрдд рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╕рд░рдгреА рдХреЗрд╡рд▓ рдбреЗрдЯрд╛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░ рд╕рдХрддреА рд╣реИред рд╣рдо рд╕рд░рдгреА рдХреЛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдХрд┐рд╕реА рддрд░рд╣ рдЗрд╕рдХреЗ рддрддреНрд╡реЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рд╕рд░рдгреА рд╣рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдмрддрд╛ рд╕рдХрддреА рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдПрдХ рдирдпрд╛ рддрддреНрд╡ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╕рд░рдгреА рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИ, рд╣рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдорд╛рд░рд╛ рдПрд░реЗ рд╣рдореЗрдВ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдпрд╣ рд╕реВрдЪрд┐рдд рдХрд░рдирд╛ рд╣реИ рдХрд┐ рдЗрд╕рдореЗрдВ рдирдпрд╛ рдбреЗрдЯрд╛ рдЖрдпрд╛ рд╣реИ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рд╕рд░рдгреА рдХреЛ рдирд┐рд╢реНрдЪрд┐рддрддрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдзрд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рдкреНрд░рд╡рд╛рд╣ рдХреА рдкрд░рд┐рднрд╛рд╖рд╛ рдкрд░ рдЖрддреЗ рд╣реИрдВред рдПрдХ рд╕реНрдЯреНрд░реАрдо рдбреЗрдЯрд╛ рдХреА рдПрдХ рд╕рд░рдгреА рд╣реИ рдЬреЛ рд╕рдордп рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХреНрд░рдордмрджреНрдз рд╣реЛрддреА рд╣реИ рдЬреЛ рдпрд╣ рд╕рдВрдХреЗрдд рджреЗ рд╕рдХрддреА рд╣реИ рдХрд┐ рдбреЗрдЯрд╛ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред
рдирдореВрджрд╛рд░
рдЕрдм рдЬрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдкреНрд░рд╡рд╛рд╣ рдХреНрдпрд╛ рд╣реИрдВ, рддреЛ рдЙрдирдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред RxJS рдореЗрдВ, рдзрд╛рд░рд╛рдУрдВ рдХреЛ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдХреНрд▓рд╛рд╕ рджреНрд╡рд╛рд░рд╛ рджрд░реНрд╢рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЕрдкрдиреА рд╕реНрд╡рдпрдВ рдХреА рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рд╡рд░реНрдЧ рдХреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░реЗрдВ:
const observable = new Observable(observer => { observer.next(1); observer.next(2); observer.complete(); })
рд╡реЗрдзрд╢рд╛рд▓рд╛ рд╡рд░реНрдЧ рдХреЗ рдирд┐рд░реНрдорд╛рддрд╛ рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рдирдпрд╛ рдзрд╛рдЧрд╛ рдмрдирд╛рддреЗ рд╣реИрдВред рдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ, рд╣рдордиреЗ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рджрд┐рдпрд╛ред рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдирд┐рдпрдорд┐рдд рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдПрдХ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЗ рд░реВрдк рдореЗрдВ рд▓реЗрддрд╛ рд╣реИред рдкреНрд░реЗрдХреНрд╖рдХ рд╕реНрд╡рдпрдВ рдПрдХ рдРрд╕реА рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдХреЗ рддреАрди рддрд░реАрдХреЗ рд╣реИрдВ:
- рдЕрдЧрд▓рд╛ - рд╕реНрдЯреНрд░реАрдо рдореЗрдВ рдПрдХ рдирдпрд╛ рдорд╛рди рдлреЗрдВрдХрддрд╛ рд╣реИ
- рддреНрд░реБрдЯрд┐ - рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЛ рдзрд╛рд░рд╛ рдореЗрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдзрд╛рд░рд╛ рд╕рдорд╛рдкреНрдд рд╣реЛрддреА рд╣реИ
- рдкреВрд░рд╛ - рдзрд╛рдЧрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ
рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рдРрд╕рд╛ рдзрд╛рдЧрд╛ рдмрдирд╛рдпрд╛ рдЬреЛ рджреЛ рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдЕрдВрд╢рджрд╛рди
рдЕрдЧрд░ рд╣рдо рдкрд┐рдЫрд▓рд╛ рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ, рддреЛ рдХреБрдЫ рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рд╣рдо рдХреЗрд╡рд▓ рдПрдХ рдирдИ рд╕реНрдЯреНрд░реАрдо рдмрдирд╛рдПрдВрдЧреЗ рдФрд░ рджреЗрдЦрдиреЗ рдпреЛрдЧреНрдп рдЪрд░ рдореЗрдВ рд▓рд┐рдВрдХ рдХреЛ рд╕рд╣реЗрдЬреЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рд╕реНрдЯреНрд░реАрдо рд╕реНрд╡рдпрдВ рдХрднреА рднреА рдПрдХ рдорд╛рди рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдирд╣реАрдВ рдХрд░реЗрдЧреАред рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдзрд╛рдЧреЗ "рдЖрд▓рд╕реА" рд╡рд╕реНрддреБ рд╣реИрдВ рдФрд░ рдЦреБрдж рд╕реЗ рдХреБрдЫ рднреА рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдорд╛рд░реА рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдорд╛рдиреЛрдВ рдХреЛ рдЫреЛрдбрд╝рдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдФрд░ рд╣рдо рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╣рдореЗрдВ рд╕реНрдЯреНрд░реАрдо рдХреЛ "рд╕реБрдирдирд╛" рд╢реБрд░реВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЗрд╕реЗ рдСрдмреНрдЬрд░реНрд╡реЗрдмрд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд░ рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рд╡рд┐рдзрд┐ рдХрд╣рдХрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
const observer = { next: value => console.log(value),
рд╣рдордиреЗ рдЕрдкрдиреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреА рдкрд╣рдЪрд╛рди рдХреА рдФрд░ рдЙрд╕рдХреЗ рд▓рд┐рдП рддреАрди рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛: рдЕрдЧрд▓рд╛, рддреНрд░реБрдЯрд┐, рдкреВрд░реНрдгред рддрд░реАрдХреЗ рдмрд╕ рдбреЗрдЯрд╛ рд▓реЙрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдлрд┐рд░ рд╣рдо рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдЗрд╕реЗ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рдХреЙрд▓рд┐рдВрдЧ рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдХреЗ рд╕рдордп рдкрд░, рд╕рдмреНрд╕рдХреНрд░рд┐рдкреНрд╢рди рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╣рдордиреЗ рдЕрдкрдиреА рд╕реНрдЯреНрд░реАрдо рдШреЛрд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЪрд░рдг рдореЗрдВ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рджрд┐рдпрд╛ рдерд╛ред рдЕрдЧрд▓рд╛, рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рджреЛ рдорд╛рди рджреЗрддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рд╕реНрдЯреНрд░реАрдо рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИред
рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдХрдИ рд▓реЛрдЧреЛрдВ рдХрд╛ рд╕рд╡рд╛рд▓ рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рдлрд┐рд░ рд╕реЗ рдзрд╛рд░рд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВрдЧреЗ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рд╕рдм рдХреБрдЫ рд╕рдорд╛рди рд╣реЛрдЧрд╛: рд╕реНрдЯреНрд░реАрдо рдлрд┐рд░ рд╕реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдФрд░ рдЕрдВрдд рддрдХ рджреЛ рдорд╛рди рдкрд╛рд░рд┐рдд рдХрд░реЗрдЧрд╛ред рд╣рд░ рдмрд╛рд░ рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд╕рднреА рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд╕реЗ рд╣рдо рдирд┐рд╖реНрдХрд░реНрд╖ рдирд┐рдХрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВ: рдЪрд╛рд╣реЗ рд╣рдо рдХрд┐рддрдиреА рднреА рдмрд╛рд░ рдзрд╛рд░рд╛ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рд╣рдорд╛рд░реЗ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рдХреЛ рдПрдХ рд╣реА рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдЧрд╛ред
рд╕рджрд╕реНрдпрддрд╛ рд░рджреНрдж
рдЕрдм рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдЯрд╛рдЗрдорд░ рд▓рд┐рдЦреЗрдВрдЧреЗ рдЬреЛ рд╕рджрд╕реНрдпрддрд╛ рдХреЗ рдХреНрд╖рдг рд╕реЗ рд╕реЗрдХрдВрдб рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдЧрд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХреЛрдВ рддрдХ рдкрд╣реБрдВрдЪрд╛рдПрдЧрд╛ред
const timer = new Observable(observer => { let counter = 0;
рдХреЛрдб рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░, рд╣рдо рдПрдХ рдХрд╛рдЙрдВрдЯрд░ рдЪрд░ рдШреЛрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдлрд┐рд░, рдХреНрд▓реЛрдЬрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рд╣рдо setInterval рдореЗрдВ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдЪрд░ рддрдХ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВред рдФрд░ рд╣рд░ рд╕реЗрдХрдВрдб рд╣рдо рдЪрд░ рдХреЛ рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╣рдо рдЗрд╕реЗ рдмрдврд╝рд╛рддреЗ рд╣реИрдВред рдЕрдЧрд▓рд╛, рд╕реНрдЯреНрд░реАрдо рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рд╡рд┐рдзрд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ - рдЕрдЧрд▓рд╛ред рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ рдХрд┐ рд╣рдордиреЗ рдЕрдиреНрдп рддрд░реАрдХреЛрдВ рдХреА рдШреЛрд╖рдгрд╛ рдирд╣реАрдВ рдХреА рд╣реИред рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред рд╣рдо рдПрдХ рдЦрд╛рд▓реА рд╡рд╕реНрддреБ рднреА рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдзрд╛рдЧрд╛ рдмрд░реНрдмрд╛рдж рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд▓реЙрдиреНрдЪ рдХреЗ рдмрд╛рдж, рд╣рдо рдкреНрд░рддрд┐рд╖реНрдард┐рдд рд▓реЙрдЧ рджреЗрдЦреЗрдВрдЧреЗ рдЬреЛ рд╣рд░ рд╕реЗрдХрдВрдб рджрд┐рдЦрд╛рдИ рджреЗрдВрдЧреЗред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рдХрдИ рдмрд╛рд░ рд╕реНрдЯреНрд░реАрдо рдХреЗ рд▓рд┐рдП рдкреНрд░рдпреЛрдЧ рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдХреЛ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ, рддреЛ рд╣рдорд╛рд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдкреВрд░реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рдЬреАрд╡рди рднрд░ рдореЗрдВ рдХреНрд░рд┐рдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ setInterval рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реНрдХ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдкреВрд░реНрдг рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдзрд╛рдЧреЗ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ?
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рдпрджрд┐ рдЖрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╡рд┐рдзрд┐ рд╕рджрд╕реНрдпрддрд╛ рд╡рд╕реНрддреБ рд▓реМрдЯрд╛рддреА рд╣реИред рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рд╡рд┐рдзрд┐ рд╣реИред рд╣рдо рдЗрд╕реЗ рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рд╣рдорд╛рд░реА рдкрд░реНрдпрд╡реЗрдХреНрд╖рдХ рдзрд╛рд░рд╛ рд╕реЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдмрдВрдж рдХрд░ рджреЗрдЧреАред
const subscription = timer.subscribe({next: console.log}); setTimeout(() => subscription.unsubscribe(), 5000);
рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдХрд╛рдЙрдВрдЯрд░ 4 рдкрд░ рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди, рд╣рд╛рд▓рд╛рдВрдХрд┐ рд╣рдордиреЗ рд╕реНрдЯреНрд░реАрдо рд╕реЗ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░ рд▓рд┐рдпрд╛ рд╣реИ, рдлрд┐рд░ рднреА рд╣рдорд╛рд░рд╛ рд╕реЗрдЯ рдЗрдиреНрдЯрд░рд╡рд▓ рдлрдВрдХреНрд╢рди рдХрд╛рдо рдХрд░рддрд╛ рд░рд╣рддрд╛ рд╣реИред рд╡рд╣ рд╣рд░ рдкрд▓ рд╣рдорд╛рд░реЗ рдХрд╛рдЙрдВрдЯрд░ рдХреЛ рдмрдврд╝рд╛рддреА рд╣реИ рдФрд░ рдЙрд╕реЗ рдбрдореА рдкреНрд░реЗрдХреНрд╖рдХ рдХреЗ рдкрд╛рд╕ рднреЗрдЬрддреА рд╣реИред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд░рджреНрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддрд░реНрдХ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рджрд╕реНрдпрддрд╛ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рдирдпрд╛ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рд░рджреНрджреАрдХрд░рдг рддрд░реНрдХ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
const timer = new Observable(observer => { let counter = 0; const intervalId = setInterval(() => { observer.next(counter++); }, 1000); return () => { clearInterval(intervalId); } });
рдЕрдм рд╣рдо рд░рд╛рд╣рдд рдХреА рд╕рд╛рдВрд╕ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдорд╛рд░реЗ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдЕрдВрддрд░рд╛рд▓ рдХреЛ рд╕рд╛рдл рдХрд░реЗрдЧрд╛ред
рдирд┐рд╖реНрдХрд░реНрд╖
рдпрд╣ рд▓реЗрдЦ рдЖрд╡рд╢реНрдпрдХ рдФрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╢реАрд▓ рджреГрд╖реНрдЯрд┐рдХреЛрдгреЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рдЖрдкрдХреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдкреНрд░рд╡рд╛рд╣ рдмрдирд╛рдиреЗ рдХреЗ рдЙрджрд╛рд╣рд░рдг рднреА рд╣реИрдВред рдЕрдЧрд▓реЗ рднрд╛рдЧ рдореЗрдВ рдореИрдВ рдмрд╛рдд рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдзрд╛рдЧреЗ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдФрд░ рдХреНрдпрд╛ рддрд░реАрдХреЗ рд╣реИрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПред