рд╡рд╛рджрд╛ рдФрд░ Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рджреГрд╢реНрдп



рд╢реБрдн рджрд┐рди, рджреЛрд╕реНрддреЛрдВ!

рдореИрдВ рдЖрдкрдХреЗ рд▓рд┐рдП рд▓рд┐рдбрд╛ рд╣рд▓реНрд▓реА рдХреЗ рд▓реЗрдЦ "рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реНрдб: рдкреНрд░реЛрдорд┐рд╕ рдПрдВрдб рдЕрд╕рд┐рдВрдХреНрд╕ / рдЗрдВрддрдЬрд╛рд░" рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдкреНрд░рд╕реНрддреБрдд рдХрд░рддрд╛ рд╣реВрдВ ред

рдХреНрдпрд╛ рдЖрдк рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рднрд░ рдЖрдП рд╣реИрдВ ... рдЬреЛ рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ? рдЬрдм рдХрд╛рд░реНрдп рдЕрдирд┐рдпрдВрддреНрд░рд┐рдд, рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдХреНрд░рдо рдореЗрдВ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рдпрд╛ рджреЗрд░реА рд╕реЗ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рд╡рд╛рджреЛрдВ рдХреЗ рдореБрдЦреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛рд░реНрдп рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реБрд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╣реИред

рдореЗрд░реА рдЕрддреГрдкреНрдд рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рдФрд░ рд░рд╛рддреЛрдВ рдХреА рдиреАрдВрдж рд╣рд░рд╛рдо рд╣реЛ рдЧрдИ - рдкреВрд░реЗ рдзрдиреНрдпрд╡рд╛рдж рдХреЗ рд╕рд╛рде рдореИрдВрдиреЗ рдХрдИ рдПрдирд┐рдореЗрд╢рди рдмрдирд╛рдПред рд╡рд╛рджреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рд╡реЗ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

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


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

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

рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВ:



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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдЬ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд╛рджреЗ рд╣реИрдВред



рд╡рд╛рджрд╛ рд╕рд┐рдВрдЯреЗрдХреНрд╕


ES6 рдореЗрдВ рд╡рд╛рджреЗ рдкреЗрд╢ рдХрд┐рдП рдЧрдП рдереЗред рдХрдИ рдореИрдиреБрдЕрд▓ рдореЗрдВ рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВ:

рдПрдХ рд╡рд╛рджрд╛ (рд╡рд╛рджрд╛) рдПрдХ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреВрд░рд╛ рдпрд╛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд╣рд╛рдБ ... рддреЛ-рд╕реНрдкрд╖реНрдЯреАрдХрд░рдгред рдПрдХ рд╕рдордп рдореЗрдВ, рдЗрд╕рдиреЗ рдореБрдЭреЗ рд╡рд╛рджреЛрдВ рдХреЛ рдХреБрдЫ рдЕрдЬреАрдм, рдЕрд╕реНрдкрд╖реНрдЯ, рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХрд╛ рдЬрд╛рджреВ рдмрдирд╛рдиреЗ рд╡рд╛рд▓рд╛ рдорд╛рдирд╛ред рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рд╣реИрдВ?

рд╣рдо рдПрдХ рд░рдЪрдирд╛рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рджрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ PromiseрдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рд▓реЗрддрд╛ рд╣реИред рдХреВрд▓, рдЪрд▓реЛ рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ:



рд░реБрдХреЛ, рдпрд╣рд╛рдБ рд╡рд╛рдкрд╕ рдХреНрдпрд╛ рдЖ рд░рд╣рд╛ рд╣реИ?

PromiseрдПрдХ рд╡рд╕реНрддреБ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕реНрдерд┐рддрд┐ ( [[PromiseStatus]]) рдФрд░ рдореВрд▓реНрдп ( [[PromiseValue]]) рд╣реИред рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореВрд▓реНрдп [[PromiseStatus]]рд╣реИ pending, рдФрд░ рд╡рд╛рджрд╛ рдХрд╛ рдореВрд▓реНрдп рд╣реИ undefinedред

рдЪрд┐рдВрддрд╛ рди рдХрд░реЗрдВ, рдЖрдкрдХреЛ рдЗрд╕ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рд╕рд╛рде рд╕рд╣рднрд╛рдЧрд┐рддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЖрдк [[PromiseStatus]]рдФрд░ рдЧреБрдгреЛрдВ рддрдХ рднреА рдирд╣реАрдВ рдкрд╣реБрдВрдЪ рд╕рдХрддреЗ [[PromiseValue]]ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рдпреЗ рдЧреБрдг рдмрд╣реБрдд рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИрдВред

PromiseStatus рдпрд╛ рд╡рд╛рджреЗ рдХреА рд╕реНрдерд┐рддрд┐ рддреАрди рдореЗрдВ рд╕реЗ рдПрдХ рдорд╛рди рд▓реЗ рд╕рдХрддреА рд╣реИ:

  • fulfilled: resolved (). ,
  • rejected: rejected (). -
  • pending: , pending (, )

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

рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ PromiseрдХреЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ () => {}ред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рджреЛ рддрд░реНрдХ рджреЗрддрд╛ рд╣реИред рдкрд╣рд▓реЗ рддрд░реНрдХ рдХрд╛ рдореВрд▓реНрдп, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ resolveрдпрд╛ res, рд╡рд╛рджреЗ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдкрд░ рд▓рд╛рдЧреВ рд╡рд┐рдзрд┐ рд╣реИред рджреВрд╕рд░реЗ рддрд░реНрдХ рдХрд╛ рдореВрд▓реНрдп, рдЬрд┐рд╕реЗ рдЖрдорддреМрд░ рдкрд░ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ rejectрдпрд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ rej, рд╡рд╣ рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рд╡рд╛рджрд╛ рдЧрд▓рдд рд╣реЛрдиреЗ рдкрд░ рдЦрд╛рд░рд┐рдЬ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рддрд░реАрдХреЛрдВ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреНрдпрд╛ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ : resolveрдФрд░ рдХреВрд▓! рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╕реНрдерд┐рддрд┐ рдФрд░ рдЕрд░реНрде рд╕реЗ рдХреИрд╕реЗ рдЫреБрдЯрдХрд╛рд░рд╛ рдкрд╛рдпрд╛ рдЬрд╛рдП ред рд╡рд┐рдзрд┐ рдХреЛ рдХреЙрд▓ рдХрд░рддреЗ рд╕рдордп рд╡рд╛рджреЗ рдХреА рд╕реНрдерд┐рддрд┐ рд╣реИ , рдЬрдм -reject



pendingundefinedresolvefulfilledrejectrejectedред

[[PromiseValue]]рдпрд╛ рд╡рд╛рджреЗ рдХрд╛ рдореВрд▓реНрдп рд╡рд╣ рдореВрд▓реНрдп рд╣реИ рдЬреЛ рд╣рдо рд╡рд┐рдзрд┐рдпреЛрдВ resolveрдпрд╛ rejectрдПрдХ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рдордЬреЗрджрд╛рд░ рддрдереНрдп: рдЬреЗрдХ рдЖрд░реНрдЪреАрдмрд╛рд▓реНрдб рдиреЗ рдЗрд╕ рд▓реЗрдЦ рдХреЛ рдХреНрд░реЛрдо рдореЗрдВ рдПрдХ рдмрдЧ рдХреЛ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж рдмрддрд╛рдпрд╛, рдЬреЛ рдмрджрд▓реЗ рдореЗрдВ fulfilledрд▓реМрдЯ рдЖрдпрд╛ resolvedред



рдареАрдХ рд╣реИ, рдЕрдм рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛рдП Promiseред рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рд╕ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ?

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

рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рд╡рд╛рджреЗ рдЗрд╕рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХреЛрдб рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдПред

рдпрджрд┐ рдЫрд╡рд┐ рд▓реЛрдб рд╣реБрдИ рд╣реИ, рддреЛ рд╣рдо рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддреЗ рд╣реИрдВред рдЕрдиреНрдпрдерд╛, рдпрджрд┐ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ, рддреЛ рд╡рд╛рджреЗ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд░реЗрдВ:



рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдпрд╣ рдХреЛрдб рдЯрд░реНрдорд┐рдирд▓ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:



рдХреВрд▓! рдЬреИрд╕рд╛ рдХрд┐ рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░реЛрдорд┐рд╕ рдкрд╛рд░реНрд╕ ("рдкрд╛рд░реНрд╕") рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рд▓реМрдЯрддрд╛ рд╣реИред

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

  • .then(): рд╡рд╛рджрд╛ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
  • .catch(): рд╡рдЪрди рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдмрд╛рдж рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ
  • .finally(): рд╣рдореЗрд╢рд╛ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдмрд╛рдж рдФрд░ рд╡рд╛рджреЗ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдХреЗ рдмрд╛рдж



рд╡рд┐рдзрд┐ .thenрд╡рд┐рдзрд┐ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдорд╛рди рд▓реЗрддрд╛ рд╣реИ resolve:



рд╡рд┐рдзрд┐ .catchрд╡рд┐рдзрд┐ рдХреЛ рднреЗрдЬреЗ рдЧрдП рдорд╛рди рд▓реЗрддрд╛ рд╣реИ reject:



рдЕрдВрдд рдореЗрдВ, рд╣рдо рд╡рд╛рдВрдЫрд┐рдд рдорд╛рди рдорд┐рд▓рд╛ рд╣реИред рд╣рдо рдЗрд╕ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХреБрдЫ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдЬрдм рд╣рдо рдкреВрд░реНрддрд┐ рдпрд╛ рдПрдХ рд╡рд╛рджрд╛ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рдореЗрдВ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ Promise.resolveрдпрд╛ рддреЛ Promise.rejectрдЙрдЪрд┐рдд рдореВрд▓реНрдп рдХреЗ рд╕рд╛рдеред



рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред



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



рдореЗрдВ getImageрд╣рдо рдХрдИ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ .thenрдЕрдЧрд▓реЗ рдХрд╛рд░реНрдп рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрд░рд╡рд╛рдИ рдХреА рдЫрд╡рд┐ рд╣рд╕реНрддрд╛рдВрддрд░рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред



рдпрд╣ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдиреЗрд╕реНрдЯреЗрдб рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╕реАрдврд╝реА рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рджрд┐рдЦрддрд╛ рд╣реИред



рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдФрд░ (рдореИрдХреНрд░реЛ) рдХрд╛рд░реНрдп


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



рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ Start!ред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЛрдб рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рд╣реИ console.log('Start!')ред рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рджреВрд╕рд░рд╛ рдорд╛рди End!рдкреВрд░реНрдг рд╡рд╛рджреЗ рдХрд╛ рдореВрд▓реНрдп рдирд╣реАрдВ рд╣реИред рд╡рд╛рджреЗ рдХрд╛ рдореВрд▓реНрдп рдЕрдВрддрд┐рдо рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдХреНрдпреЛрдВ рд╣реБрдЖ?

рдпрд╣рд╛рдВ рд╣рдо рд╡рд╛рджреЛрдВ рдХреА рддрд╛рдХрдд рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдБрдХрд┐ JS рд╕рд┐рдВрдЧрд▓-рдереНрд░реЗрдбреЗрдб рд╣реИ, рдлрд┐рд░ рднреА рд╣рдо рдХреЛрдб рдХреЛ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ Promiseред

рд╣рдо рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╣рд╛рдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ? рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдХреБрдЫ рд╡рд┐рдзрд┐рдпрд╛рдБ, рдЬреИрд╕реЗ setTimeout, рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛ рдЕрдиреБрдХрд░рдг рдХрд░ рд╕рдХрддреА рд╣реИрдВред

рд╕рд╣реА рдИрд╡реЗрдВрдЯ рд▓реВрдк (рдИрд╡реЗрдВрдЯ рд▓реВрдк) рдореЗрдВ рджреЛ рдкреНрд░рдХрд╛рд░ рдХреА рдХрддрд╛рд░реЗрдВ рд╣реЛрддреА рд╣реИрдВ: (рдореИрдХреНрд░реЛ) рдХрд╛рд░реНрдпреЛрдВ рдХреА рдХрддрд╛рд░ рдпрд╛ рд╕рд┐рд░реНрдл рдХрд╛рд░реНрдп ((рдореИрдХреНрд░реЛ) рдХрд╛рд░реНрдп рдХрддрд╛рд░, рдХрд╛рд░реНрдп рдХрддрд╛рд░) рдФрд░ рдорд╛рдЗрдХреНрд░реЛрдЯреЗрд╕реНрдХ рдпрд╛ рдХреЗрд╡рд▓ рдорд╛рдЗрдХреНрд░реЛрдЯреЗрд╕реНрдХ (рдорд╛рдЗрдХреНрд░реЛрдЯреНрдпреВрдЬрд╝ рдХрддрд╛рд░, рдорд╛рдЗрдХреНрд░реЛрдЯреЗрд╕) рдХреА рдХрддрд╛рд░ред

рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдкрд░ рдХреНрдпрд╛ рд▓рд╛рдЧреВ рд╣реЛрддрд╛ рд╣реИ? рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ, рддрдм:

  • рдореИрдХреНрд░реЛ рдЯрд╛рд╕реНрдХ: setTimeout, setInterval, setImmediate
  • рдорд╛рдЗрдХреНрд░реЛрдЯреНрд░реВрдХреНрд╕: process.nextTick, Promise callback, queueMicrotask

рд╣рдо Promiseрдорд╛рдЗрдХреНрд░реЛ-рдорд╛рд╕реНрдХ рдХреА рд╕реВрдЪреА рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ ред рдЬрдм Promiseрд╡рд┐рдзрд┐ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрддреА рд╣реИ рдФрд░ рдХреЙрд▓ рдХреА рдЬрд╛рддреА рд╣реИ then(), catch()рдпрд╛ finally(), рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдХреНрдпреВ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рд╣реИ рдХрд┐ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдХреЙрд▓рдмреИрдХ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЬреЗрдПрд╕ рдХреЛрдб рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирд╛рддрд╛ рд╣реИред

рдЬрдм рд╡рд┐рдзрд┐ рд╣реЛрддреА рд╣реИ then(), catch()рдпрд╛ finally()рдЗрд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ? рдЗрд╡реЗрдВрдЯ рд▓реВрдк рдореЗрдВ рдХрд╛рд░реНрдп рдХреА рдкреНрд░рд╛рдердорд┐рдХрддрд╛ рдирд┐рдореНрди рд╣реИ:

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



рдПрдХ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

  • Task1: рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬрд┐рд╕реЗ рддреБрд░рдВрдд рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдХреЛрдб рдореЗрдВ рдХреЙрд▓ рджреНрд╡рд╛рд░рд╛ред
  • Task2, Task3, Task4: Mikrozadachi рдЙрджрд╛рд╣рд░рдг thenрд╡рд╛рджрд╛ рдпрд╛ рдХрд╛рд░реНрдп рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЬреЛрдбрд╝рд╛ queueMicrotaskред
  • Task5, Task6: рдореИрдХреНрд░реЛ рдХрд╛рд░реНрдп, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, setTimeoutрдпрд╛setImmediate



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

рдкрд░реНрдпрд╛рдкреНрдд рд╢рдмреНрджред рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╣реИрдВред



рдЗрд╕ рдХреЛрдб рдореЗрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдореИрдХреНрд░реЛ setTimeoutрдЯрд╛рд╕реНрдХ рдФрд░ рдПрдХ рдорд╛рдЗрдХреНрд░реЛ рдЯрд╛рд╕реНрдХ рд╣реИ .thenред рдХреЛрдб рдЪрд▓рд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХреНрдпрд╛ рджрд┐рдЦрд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдиреЛрдЯ: рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдореИрдВ рдЗрд╕ рддрд░рд╣ рдХреЗ рддрд░реАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ console.log, setTimeoutрдФрд░ Promise.resolveред рдпреЗ рд╕рднреА рд╡рд┐рдзрд┐рдпрд╛рдВ рдЖрдВрддрд░рд┐рдХ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╡реЗ рд╕реНрдЯреИрдХ рдЯреНрд░реЗрд╕ рдореЗрдВ рдирд╣реАрдВ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ - рдЬрдм рдЖрдк рдЙрдиреНрд╣реЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдорд╕реНрдпрд╛ рдирд┐рд╡рд╛рд░рдг рдЙрдкрдХрд░рдг рдореЗрдВ рдирд╣реАрдВ рдкрд╛рддреЗ рд╣реИрдВ рддреЛ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рди рд╣реЛрдВред

рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣реИconsole.logред рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Start!ред рдЙрд╕рдХреЗ рдмрд╛рдж, рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЗрдВрдЬрди рдХреЛрдб рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддрд╛ рд╣реИред



рдЗрдВрдЬрди рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ setTimeout, рдЬрд┐рд╕реЗ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдзрд┐ рдПрдХ рдЕрдВрддрд░реНрдирд┐рд╣рд┐рдд рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдзрд┐ рд╣реИ: рдЗрд╕рдХрд╛ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди ( () => console.log('In timeout')) рд╡реЗрдм рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдЯрд╛рдЗрдорд░ рдХреА рдЖрдЧ рд╕реЗ рдкрд╣рд▓реЗ рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рддрдереНрдп рдХреЗ рдмрд╛рд╡рдЬреВрдж рдХрд┐ рдЯрд╛рдЗрдорд░ рдХрд╛рдЙрдВрдЯрд░ 0 рд╣реИ, рдХреЙрд▓рдмреИрдХ рдХреЛ рдЕрднреА рднреА рдкрд╣рд▓реЗ WebAPI рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рдореИрдХреНрд░реЛ рдЯрд╛рд╕реНрдХ рдХрддрд╛рд░ рдореЗрдВ: setTimeout- рдпрд╣ рдПрдХ рдореИрдХреНрд░реЛ рдЯрд╛рд╕реНрдХ рд╣реИред



рдЕрдЧрд▓рд╛, рдЗрдВрдЬрди рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ Promise.resolve()ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдлрд┐рд░ рдПрдХ рдорд╛рди рдХреЗ рд╕рд╛рде рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ Promiseред рдЙрд╕рдХрд╛ рдХреЙрд▓рдмреИрдХ thenрдорд╛рдЗрдХреНрд░реЛрдЯрд╕реНрдХ рдХреНрдпреВ рдореЗрдВ рд░рдЦрд╛ рдЧрдпрд╛ рд╣реИред



рдЕрдВрдд рдореЗрдВ, рдЗрдВрдЬрди рджреВрд╕рд░реА рд╡рд┐рдзрд┐ рддрдХ рдкрд╣реБрдВрдЪрддрд╛ рд╣реИ console.log()ред рдпрд╣ рддреБрд░рдВрдд рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрд╣ рдХрдВрд╕реЛрд▓ рдкрд░ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрддрд╛ рд╣реИEnd!рд╡рд┐рдзрд┐ рдХреЛ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЗрдВрдЬрди рдЬрд╛рд░реА рд░рд╣рддрд╛ рд╣реИред



рдЗрдВрдЬрди "рджреЗрдЦрддрд╛ рд╣реИ" рдХрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИред рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдирд╛ред рдпрд╣ рд╡рд╣рд╛рдВ рд╕реНрдерд┐рдд рд╣реИ thenред рдЗрд╕реЗ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд╡рд╛рджреЗ рдХрд╛ рдореВрд▓реНрдп рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ: рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ Promise!ред



рдЗрдВрдЬрди рджреЗрдЦрддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреИрдХ рдЦрд╛рд▓реА рд╣реИред рд╡рд╣ "рд▓реБрдХ" рдорд╛рдЗрдХреНрд░реЛрдЯреНрдпреВрдЬрд╝ рдХреА рдХрддрд╛рд░ рдореЗрдВ рд╣реИред рд╡рд╣ рднреА рдЦрд╛рд▓реА рд╣реИред

рдпрд╣ рдореИрдХреНрд░реЛ рдХрд╛рд░реНрдп рдХрддрд╛рд░ рдХреА рдЬрд╛рдБрдЪ рдХрд░рдиреЗ рдХрд╛ рд╕рдордп рд╣реИ: рдпрд╣ рд╡рд╣рд╛рдБ рд╣реИ setTimeoutред рдпрд╣ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд┐рдзрд┐ рджреЗрддрд╛ рд╣реИ console.log()ред рдХрдВрд╕реЛрд▓ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЖрдЙрдЯрдкреБрдЯ рд╣реИ 'In timeout!'ред setTimeoutрд╕реНрдЯреИрдХ рд╕реЗ рдирд┐рдХрд╛рд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдХрд┐рдпрд╛ рд╣реБрдЖред рдЕрдм рд╕рдм рдХреБрдЫ рдареАрдХ рд╣реЛ рдЧрдпрд╛?



Async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ


ES7 рдиреЗ JS рдореЗрдВ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдирдпрд╛ рддрд░реАрдХрд╛ рдкреЗрд╢ рдХрд┐рдпрд╛ред рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ asyncрдФрд░ awaitрд╣рдо рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди ... рд╣рдо рдпрд╣ рдХреИрд╕реЗ рдХрд░рддреЗ рд╣реИрдВ?

рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ, рд╣рдордиреЗ рдЪрд░реНрдЪрд╛ рдХреА рдХрд┐ рдХрд┐рд╕реА рд╡рд╕реНрддреБ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХреИрд╕реЗ рдмрдирд╛рдпрд╛ рдЬрд╛рдП Promise: рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ new Promise(() => {}), Promise.resolveрдпрд╛ Promise.rejectред

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



рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдореЗрдВ рдирд┐рд╣рд┐рдд рд░реВрдк рд╕реЗ рдПрдХ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдорд╣рд╛рди рд╣реИ, рд▓реЗрдХрд┐рди рдПрдХ рдХреАрд╡рд░реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╕рдордп рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢рдХреНрддрд┐ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рдХрдЯ рд╣реЛрддреА рд╣реИ awaitредawaitрдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдорд╛рд░реЛрд╣ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд╡рд╛рджреЗ (рдЗрд╕рдХреЗ рдореВрд▓реНрдп) рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдХрд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдЪрд░ рдХреЛ рд╡рд╛рджреЗ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдЕрдкреЗрдХреНрд╖рд┐рдд (рдкреНрд░рддреАрдХреНрд╖рд┐рдд) рдореВрд▓реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдорд╣рд╛рди, рд▓реЗрдХрд┐рди ... рдЗрд╕рдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИ?

рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЬрдм рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдЪрд▓рд╛рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:







рдкрд╣рд▓реЗ рддреЛ рдЗрдВрдЬрди рджреЗрдЦрддрд╛ рд╣реИ console.logред рдпрд╣ рд╡рд┐рдзрд┐ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджреА рдЬрд╛рддреА рд╣реИ рдФрд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддреА рд╣реИ Before function!ред



рдлрд┐рд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ myFunc(), рдЗрд╕рдХреЗ рдХреЛрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреА рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдореЗрдВ, рд╣рдо рджреВрд╕рд░реА console.logрдкрдВрдХреНрддрд┐ рдХреЗ рд╕рд╛рде рдХреЙрд▓ рдХрд░рддреЗ рд╣реИрдВ 'In function!'ред рдЗрд╕ рдкрджреНрдзрддрд┐ рдХреЛ рд╕реНрдЯреИрдХ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рдорд╛рди рдХрдВрд╕реЛрд▓ рдкрд░ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреИрдХ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред



рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдХреЛ рдЕрдЧрд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджреВрд╕рд░реА рд▓рд╛рдЗрди рдкрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рдХреАрд╡рд░реНрдб рд╣реИ awaitред

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

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



рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рджреЗрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЗрдВрдЬрди рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдХреЛрдб рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред



рд╕рднреА рдХреЛрдб рдХреЛ рдПрдХ рд╡реИрд╢реНрд╡рд┐рдХ рд╕рдВрджрд░реНрдн рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдШрдЯрдирд╛ рд▓реВрдк microtasks рдФрд░ рдкрддрд╛ рд▓рдЧрд╛рддрд╛ рд╣реИ myFunc()ред myFunc()рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреНрдХрд╛ рджрд┐рдпрд╛ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ред

рдЪрд░ resрдХреЛ рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рд╡рд╛рдкрд╕ рдХрд┐рдП рдЧрдП рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╡рд╛рджреЗ рдХрд╛ рдореВрд▓реНрдп рдорд┐рд▓рддрд╛ рд╣реИ oneред рд╣рдо console.logрдЪрд░ рдХреЗ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдХрд╣рддреЗ рд╣реИрдВ res: One!рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ ред One!рдпрд╣ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрддрд╛ рд╣реИред

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



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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ "рд╕реЗрд╡рд╛ рдХрд░реНрдордЪрд╛рд░рд┐рдпреЛрдВ рдХреЗ рдХрд╛рдо рдХрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓рд╛рдЗрдЬрд╝реЗрд╢рди" рджреЗрдЦреЗрдВ ред

рдЖрдкрдХреЗ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╢реБрдХреНрд░рд┐рдпрд╛ред рдореБрдЭреЗ рдЖрд╢рд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

All Articles