
рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ Async / Await рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, Async / Await рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХрд╛ рдПрдХ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рддрд░реАрдХрд╛ рд╣реИред рдЗрд╕ рдЕрд╡рд╕рд░ рд╕реЗ рдкрд╣рд▓реЗ, рдХреЙрд▓рдмреИрдХ рдФрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдорд╛рди рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рдореВрд▓ рд▓реЗрдЦ рдХреЗ рд▓реЗрдЦрдХ рдиреЗ рд╡рд┐рднрд┐рдиреНрди рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдХреЗ Async / Await рдХреЗ рд▓рд╛рднреЛрдВ рдХрд╛ рдЦреБрд▓рд╛рд╕рд╛ рдХрд┐рдпрд╛ рд╣реИред
рд╣рдо рдЖрдкрдХреЛ рдпрд╛рдж рджрд┐рд▓рд╛рддреЗ рд╣реИрдВ: "рд╣реИрдмрд░" рдХреЗ рд╕рднреА рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП - "рд╣реИрдмрд░" рдкреНрд░реЛрдореЛ рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд┐рд╕реА рднреА рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдХреЛрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкрдВрдЬреАрдХрд░рдг рдХрд░рддреЗ рд╕рдордп 10,000 рд░реВрдмрд▓ рдХреА рдЫреВрдЯред
Skillbox рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: рдЬрд╛рд╡рд╛ рдбреЗрд╡рд▓рдкрд░ рдСрдирд▓рд╛рдЗрди рд╢рд┐рдХреНрд╖рд╛ рдкрд╛рдареНрдпрдХреНрд░рдоред
рдХреЙрд▓рдмреИрдХ
рдХреЙрд▓рдмреИрдХ рдПрдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдХреЙрд▓ рдЕрдирд┐рд╢реНрдЪрд┐рдд рдХрд╛рд▓ рдХреЗ рд▓рд┐рдП рд╡рд┐рд▓рдВрдмрд┐рдд рд╣реИред рдкрд╣рд▓реЗ, рдХреЛрдбрдмреИрдХ рдХреЗ рдЙрди рд╣рд┐рд╕реНрд╕реЛрдВ рдореЗрдВ рдХреЙрд▓рдмреИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рдерд╛, рдЬрд╣рд╛рдБ рдкрд░рд┐рдгрд╛рдо рддреБрд░рдВрдд рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рдерд╛ред
рдпрд╣рд╛рдБ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ Node.js рдкрд░ рдПрдХ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
fs.readFile(__filename, 'utf-8', (err, data) => { if (err) { throw err; } console.log(data); });
рдЬрдм рдЖрдк рдПрдХ рд╕рд╛рде рдХрдИ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдСрдкрд░реЗрд╢рди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ рддреЛ рд╕рдорд╕реНрдпрд╛рдПрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИрдВред рдЖрдЗрдП рдЗрд╕ рдкрд░рд┐рджреГрд╢реНрдп рдХреА рдХрд▓реНрдкрдирд╛ рдХрд░реЗрдВ: Arfat рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЖрдкрдХреЛ рдЗрд╕рдХреЗ profile_img_url рдлрд╝реАрд▓реНрдб рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ someserver.com рд╕рд░реНрд╡рд░ рд╕реЗ рдПрдХ рдЪрд┐рддреНрд░ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдЫрд╡рд┐ рдХреЛ рджреВрд╕рд░реЗ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдкреАрдПрдирдЬреА рд╕реЗ рдЬреЗрдкреАрдИрдЬреА рддрдХред рдпрджрд┐ рд░реВрдкрд╛рдВрддрд░рдг рд╕рдлрд▓ рдерд╛, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдореЗрд▓ рдкрд░ рдПрдХ рдИрдореЗрд▓ рднреЗрдЬрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдШрдЯрдирд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рджрд░реНрдЬ рдХреА рдЬрд╛рддреА рд╣реИред рдлрд╛рдЗрд▓ред

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

рд╡рд╛рджреЛрдВ рдХрд╛ рд╕рдХрд╛рд░рд╛рддреНрдордХ рдмрд┐рдВрджреБ рдпрд╣ рдерд╛ рдХрд┐ рдЙрдирдХреЗ рд╕рд╛рде рдХреЛрдб рдмреЗрд╣рддрд░ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдКрдкрд░ рд╕реЗ рдиреАрдЪреЗ рддрдХ, рдФрд░ рдмрд╛рдПрдВ рд╕реЗ рджрд╛рдПрдВ рдирд╣реАрдВред рдлрд┐рд░ рднреА, рд╡рд╛рджреЛрдВ рдХреА рднреА рдЕрдкрдиреА рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВ:
- .Then рдХреА рдПрдХ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
- рд╕рднреА рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП .catch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп .catch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдПрдХ рдЪрдХреНрд░ рдХреЗ рднреАрддрд░ рдХрдИ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рд╣рдореЗрд╢рд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реЛрддрд╛ рд╣реИ, рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рд╡реЗ рдХреЛрдб рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рддреЗ рд╣реИрдВред
рдпрд╣рд╛рдВ рдПрдХ рдХрд╛рд░реНрдп рд╣реИ рдЬреЛ рдЕрдВрддрд┐рдо рдкреИрд░рд╛рдЧреНрд░рд╛рдл рдХрд╛ рдЕрд░реНрде рджрд┐рдЦрд╛рдПрдЧрд╛ред
рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рдПрдХ рд▓реВрдк рд╣реИ рдЬреЛ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдЕрдВрддрд░рд╛рд▓ (0 - n рд╕реЗрдХрдВрдб) рдХреЗ рд╕рд╛рде 0 рд╕реЗ 10 рддрдХ рдХреА рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЕрдиреБрдХреНрд░рдо рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рддрд╛ рд╣реИред рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП, рдЖрдкрдХреЛ рдЗрд╕ рдЪрдХреНрд░ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╕рдВрдЦреНрдпрд╛ 0 рд╕реЗ 10 рддрдХ рдЕрдиреБрдХреНрд░рдо рдореЗрдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рд╢реВрдиреНрдп рдЖрдЙрдЯрдкреБрдЯ рдореЗрдВ 6 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ рдФрд░ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ 2 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВ, рддреЛ рд╢реВрдиреНрдп рдХреЛ рдкрд╣рд▓реЗ рдЖрдЙрдЯрдкреБрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдлрд┐рд░ рдпреВрдирд┐рдЯ рдЖрдЙрдЯрдкреБрдЯ рдХрд╛рдЙрдВрдЯрдбрд╛рдЙрди рд╢реБрд░реВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдФрд░ рд╣рд╛рдВ, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо Async / Await рдпрд╛ .sort рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдПрдХ рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рдЕрдВрдд рдореЗрдВ рд╣реИред
Async рдХрд╛рд░реНрдп рдХрд░рддрд╛ рд╣реИ
ES2017 (ES8) рдореЗрдВ async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдЬреЛрдбрд╝рдирд╛ рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рд╕рд░рд▓ рдмрдирд╛ рджрд┐рдпрд╛ рд╣реИред рдореИрдВ рдзреНрдпрд╛рди рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ async рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╡рд╛рджреЛрдВ рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред рдпреЗ рдХрд╛рд░реНрдп рдЧреБрдгрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд┐рднрд┐рдиреНрди рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдХреЗ рд╡рд┐рдХрд▓реНрдк рдХреЗ рд░реВрдк рдореЗрдВ Async рдлрд╝рдВрдХреНрд╢рди рдХреА рдХрд▓реНрдкрдирд╛ рдХреА рдЧрдИ рдереА рдЬреЛ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред
Async / Await рд╕рдордХрд╛рд▓рд┐рдХ рд╢реИрд▓реА рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛рддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рдХрд╛рд░, рд╡рд╛рджреЛрдВ рдХрд╛ рдЬреНрдЮрд╛рди Async / Await рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддреЛрдВ рдХреЛ рд╕рдордЭрдирд╛ рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
рд╡рд╛рдХреНрдп-рд╡рд┐рдиреНрдпрд╛рд╕рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдЗрд╕рдореЗрдВ рджреЛ рдХреАрд╡рд░реНрдб рд╣реЛрддреЗ рд╣реИрдВ: async рдФрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ред рдкрд╣рд▓рд╛ рд╢рдмреНрдж рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирд╛рддрд╛ рд╣реИред рдпреЗ рдХрд╛рд░реНрдп рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред рдХрд┐рд╕реА рдЕрдиреНрдп рдорд╛рдорд▓реЗ рдореЗрдВ, рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред
Async рдлрд╝рдВрдХреНрд╢рди рдШреЛрд╖рдгрд╛ рдХреЗ рдмрд╣реБрдд рд╢реБрд░реБрдЖрдд рдореЗрдВ рдбрд╛рд▓рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рддреАрд░ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, "=" рдЪрд┐рд╣реНрди рдФрд░ рдХреЛрд╖реНрдардХ рдХреЗ рдмреАрдЪред
рдЗрди рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдПрдХ рд╡рд╕реНрддреБ рдореЗрдВ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рд░рдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд╡рд░реНрдЧ рдШреЛрд╖рдгрд╛ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдирд╛рдпрдм! рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдХреНрд▓рд╛рд╕ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдФрд░ рдЧреЗрдЯрд░реНрд╕ / рд╕реЗрдЯрд░ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред
рд╢рдмреНрджрд╛рд░реНрде рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдирд┐рдпрдоAsync рдлрд╝рдВрдХреНрд╢рди рдореВрд▓ рд░реВрдк рд╕реЗ рдорд╛рдирдХ JS рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреБрдЫ рдЕрдкрд╡рд╛рдж рднреА рд╣реИрдВред
рдЗрд╕рд▓рд┐рдП, async рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣рдореЗрд╢рд╛ рд╡рд╛рджреЗ рд╡рд╛рдкрд╕ рдХрд░рддреЗ рд╣реИрдВ:
async function fn() { return 'hello'; } fn().then(console.log)
рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ, fn рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рд╣реИрд▓реЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЦреИрд░, рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╡реИрд▓реНрдпреВ рдХреЛ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╡рд╛рджреЗ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЧрдпрд╛ рд╣реИред
рдпрд╣рд╛рдБ Async рдХреЗ рдмрд┐рдирд╛ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рдбрд┐рдЬрд╛рдЗрди рд╣реИ:
function fn() { return Promise.resolve('hello'); } fn().then(console.log);
рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╡рд╛рджреЗ рдХреА рд╡рд╛рдкрд╕реА "рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ" рдХреА рдЬрд╛рддреА рд╣реИред рдПрдХ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рд╣рдореЗрд╢рд╛ рдПрдХ рдирдП рд╡рд╛рджреЗ рдореЗрдВ рдЦреБрдж рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред
рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рдПрдХ рдЖрджрд┐рдо рд╣реИ, async рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдорд╛рди рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдЗрд╕реЗ рдПрдХ рд╡рд╛рджреЗ рдореЗрдВ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рд╡рд╛рдкрд╕реА рдореВрд▓реНрдп рд╡рд╛рджреЗ рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рд╣реИ, рдирдП рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдЗрд╕рдХрд╛ рд╕рдорд╛рдзрд╛рди рд╡рд╛рдкрд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
const p = Promise.resolve('hello') p instanceof Promise;
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рддреНрд░реБрдЯрд┐ рд╣реЛрддреА рд╣реИ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ?
async function foo() { throw Error('bar'); } foo().catch(console.log);
рдпрджрд┐ рдЗрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ foo () рд░рд┐рдбреНрдпреВрдЬ рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рдПрдЧрд╛ред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, Promise.resolve рдХреЗ рдмрдЬрд╛рдп, Promise.reject рдПрдХ рддреНрд░реБрдЯрд┐ рд╕реЗ рдпреБрдХреНрдд рд╣реЛрдЧрд╛ред
рдЖрдЙрдЯрдкреБрдЯ рдкрд░ Async рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╣рдореЗрд╢рд╛ рд╡рд╛рджреЗ рджреЗрддреЗ рд╣реИрдВ, рдЪрд╛рд╣реЗ рдЬреЛ рднреА рд▓реМрдЯрд╛ рд╣реЛред
рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдкрд░ рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЖрд╡рд╛ рднрд╛рд╡реЛрдВ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╡рд╛рджрд╛ рд╣реИ, рддреЛ async рдлрд╝рдВрдХреНрд╢рди рдирд┐рд▓рдВрдмрд┐рдд рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╛рджрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдШрдЯрдирд╛ рдореЗрдВ рдХрд┐ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдПрдХ рд╡рд╛рджрд╛ рдирд╣реАрдВ рд╣реИ, рдпрд╣ рд╡рд╛рджрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рд╡рд╛рджрд╛ рдореЗрдВ рдмрджрд▓ рдЬрд╛рддреА рд╣реИред рд╕рдорд╛рдзрд╛рди рдФрд░ рдлрд┐рд░ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рдпрд╣рд╛рдБ fn рдлрд╝рдВрдХреНрд╢рди рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
- рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдкрд╣рд▓реА рдкрдВрдХреНрддрд┐ рдХреЛ рдХреЙрдиреНрд╕реНрдЯреЗрдВрдЯ рдП = рдкреНрд░рддреАрдХреНрд╖рд╛ 9 рд╕реЗ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ; in const a = wait Promise.resolve (9) ;;
- рдЕрджреНрд╡реИрдд рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рддрдм рддрдХ рдирд┐рд▓рдВрдмрд┐рдд рд░рд╣рддрд╛ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╡рд╣ рдЕрдкрдирд╛ рдореВрд▓реНрдп рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ (рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдпрд╣ 9 рд╣реИ)ред
- delayAndGetRandom (1000) fn рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рддрдм рддрдХ рд░реЛрдХрддреА рд╣реИ рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рд╕реНрд╡рдпрдВ (1 рд╕реЗрдХрдВрдб рдХреЗ рдмрд╛рдж) рд╕рдорд╛рдкреНрдд рди рд╣реЛ рдЬрд╛рдПред рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 1 рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП fn рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд░реЛрдХ рд░рд╣рд╛ рд╣реИред
- рд╡рд┐рд▓рдВрдмрдПрдВрдбрдЧреЗрдЯрдЧреНрд░реИрдВрдбреИрдо (1000) рд░рд┐рдЬрд╝реЙрд▓реНрдпреВрд╢рди рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдореВрд▓реНрдп рджреЗрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рддрдм рдЪрд░ рдмреА рдХреЛ рд╕реМрдВрдкрд╛ рдЬрд╛рддрд╛ рд╣реИред
- рдЦреИрд░, рдЪрд░ рд╕реА рдХрд╛ рдорд╛рдорд▓рд╛ рдЪрд░ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реИред рдЙрд╕рдХреЗ рдмрд╛рдж, рд╕рдм рдХреБрдЫ рдПрдХ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рдмрдВрдж рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рджреЗрд░реАрдЧреЗрдЯрдЧреНрд░реИрдВрдбрдЧреНрд░реИрдВрдб (1000) рдХреБрдЫ рднреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рдирд╣реАрдВ рд╣реИред
- рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдорд╛рдиреЛрдВ рдХреА рдЧрдгрдирд╛ рд╕реВрддреНрд░ a + b * c рджреНрд╡рд╛рд░рд╛ рдХреА рдЬрд╛рддреА рд╣реИред рдкрд░рд┐рдгрд╛рдо рд╡рд╛рджрд╛ рдХреЗ рд╕рд╛рде рд▓рд┐рдкрдЯреЗ рд╣реБрдП рд╣реИред
рдпреЗ рд░реЛрдХреЗрдВ ES6 рдореЗрдВ рдЬрдирд░реЗрдЯрд░ рд╕реЗ рдорд┐рд▓ рд╕рдХрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ
рдХрд╛рд░рдг рд╣реИрдВред
рд╣рдо рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рддреЗ рд╣реИрдВ
рдЦреИрд░, рдЕрдм рд╣рдо рдЙрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рджреЗрдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдКрдкрд░ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

FinishMyTask рдлрд╝рдВрдХреНрд╢рди, рдХреНрд╡реЗрд░реАрдбреИрдЯрдмреЗрд╕, рд╕реЗрдВрдбрдЗрдореЗрд▓, рд▓реЙрдЧрдЯреИрд╕реНрдХрдЗрдирдлрд╛рдЗрд▓ рдФрд░ рдЕрдиреНрдп рдЬреИрд╕реЗ рдСрдкрд░реЗрд╢рдВрд╕ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рд╣рдо рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреА рддреБрд▓рдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд╣рд╛рдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рд╕рдорд╛рдирддрд╛рдПрдВ рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЬрд╛рдПрдВрдЧреАред рдлрд┐рд░ рднреА, Async / Await рд╡рд╛рд▓рд╛ рд╕рдВрд╕реНрдХрд░рдг рд╕рднреА рд╡рд╛рдХреНрдпрд╛рддреНрдордХ рдХрдард┐рдирд╛рдЗрдпреЛрдВ рдХреЛ рд╕рд░рд▓ рдХрд░рддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдмрд╣реБрдд рд╕рд╛рд░реЗ рдХреЙрд▓рдмреИрдХ рдФрд░ рдЪреЗрди рдирд╣реАрдВ рд╣реИрдВред
рдпрд╣рд╛рдВ рд╕рдВрдЦреНрдпрд╛рдУрдВ рдХреЗ рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИ, рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред
const wait = (i, ms) => new Promise(resolve => setTimeout(() => resolve(i), ms));
рдФрд░ рдпрд╣рд╛рдБ async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реИред
async function printNumbersUsingAsync() { for (let i = 0; i < 10; i++) { await wait(i, Math.random() * 1000); console.log(i); } }
рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐рдЕрдкреНрд░рдорд╛рдгрд┐рдд рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЛ рдЕрд╕реНрд╡реАрдХрд╛рд░ рдХрд┐рдП рдЧрдП рд╡рд╛рджреЛрдВ рдореЗрдВ рд▓рдкреЗрдЯрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, async рдлрд╝рдВрдХреНрд╢рдВрд╕ рдореЗрдВ, рдЖрдк рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдПрд░рд░ рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЯреНрд░рд╛рдИ / рдХреИрдЪ рдирд┐рд░реНрдорд╛рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
async function canRejectOrReturn() {
canRejectOrReturn () рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рдпрд╛ рддреЛ рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИ ("рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛") рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рд╡рд┐рдлрд▓ рд╣реЛрддрд╛ рд╣реИ ("рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдмрдбрд╝реА")ред
async function foo() { try { await canRejectOrReturn(); } catch (e) { return 'error caught'; } }
рдЪреВрдВрдХрд┐ canRejectOrReturn рдХреЛ рдЙрдкрд░реЛрдХреНрдд рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЙрдореНрдореАрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХрд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдЕрд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рдкреВрд░рд╛ рдХрд░реЗрдЧрд╛ред рдирддреАрдЬрддрди, рдлреВ рдлрд╝рдВрдХреНрд╢рди рдпрд╛ рддреЛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛ рдЬрд╛рдПрдЧрд╛ (рдЬрдм рдХреЛрд╢рд┐рд╢ рдмреНрд▓реЙрдХ рдореЗрдВ рдХреБрдЫ рднреА рд╡рд╛рдкрд╕ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ) рдпрд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде рдкрдХрдбрд╝рд╛ рдЧрдпрд╛ред рдирддреАрдЬрддрди, рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдХреЛрд╢рд┐рд╢ / рдкрдХрдбрд╝ рд╕реНрд╡рдпрдВ рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕рдВрднрд╛рд▓ рд▓реЗрдВрдЧреЗред
рдпрд╣рд╛рдБ рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рд╣реИ:
async function foo() { try { return canRejectOrReturn(); } catch (e) { return 'error caught'; } }
рдпрд╣ рдЗрд╕ рддрдереНрдп рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ foo canRejectOrReturn рд╕реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдлреВ рдпрд╛ рддреЛ рдПрдХ рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде рдкреВрд░рд╛ рд╣реЛрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рддреНрд░реБрдЯрд┐ ("рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╕рдВрдЦреНрдпрд╛ рдмрд╣реБрдд рдмрдбрд╝реА") рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИред рдХреИрдЪ рдмреНрд▓реЙрдХ рдХреЛ рдХрднреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ foo canRejectOrReturn рд╕реЗ рдкрд╛рд░рд┐рдд рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлреВ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рд╕рдорд╛рдзрд╛рди canRejectOrReturn рдХрд╛ рд╕рдорд╛рдзрд╛рди рдмрди рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рдХреЛрдб рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рд▓рд╛рдЗрдиреЗрдВ рд╣реЛрдВрдЧреА:
try { const promise = canRejectOrReturn(); return promise; }
рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдЗрдВрддрдЬрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдПрдХ рд╕рд╛рде рд▓реМрдЯрддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ:
async function foo() { try { return await canRejectOrReturn(); } catch (e) { return 'error caught'; } }
рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдореЗрдВ, рдлреВ рд╕рд╣реА рд╕рдВрдЦреНрдпрд╛ рдФрд░ рддреНрд░реБрдЯрд┐ рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдлрд▓ рд╣реЛрддрд╛ рд╣реИред рдХреЛрдИ рдЕрд╕рдлрд▓рддрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред рд▓реЗрдХрд┐рди рдлреВ canRejectOrReturn рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрдЧрд╛, рдФрд░ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рдирд╣реАрдВред рдЪрд▓рд┐рдП рд╡рд╛рдкрд╕реА рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдЦрддреНрдо рдХрд░рдХреЗ рдЗрд╕реЗ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рддреЗ рд╣реИрдВред
try { const value = await canRejectOrReturn(); return value; }
рдЖрдо рдЧрд▓рддрд┐рдпрд╛рдБ рдФрд░ рдиреБрдХрд╕рд╛рди
рдХреБрдЫ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, Async / Await рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рддреНрд░реБрдЯрд┐рдпрд╛рдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВред
рднреБрд▓рд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЗрдВрддрдЬрд╛рд░рдпрд╣ рдмрд╣реБрдд рдмрд╛рд░ рд╣реЛрддрд╛ рд╣реИ - рд╡рд╛рджреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдкреНрд░рддреАрдХреНрд╖рд┐рдд рдХреАрд╡рд░реНрдб рдХреЛ рднреБрд▓рд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:
async function foo() { try { canRejectOrReturn(); } catch (e) { return 'caught'; } }
рдХреЛрдб рдореЗрдВ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рди рддреЛ рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ рдФрд░ рди рд╣реА рд╡рд╛рдкрд╕реА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдлреВ рд╣рдореЗрд╢рд╛ 1 рд╕реЗрдХрдВрдб рдХреА рджреЗрд░реА рдХреЗ рдмрд┐рдирд╛ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреЗ рд╕рд╛рде рдмрд╛рд╣рд░ рдирд┐рдХрд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╛рджрд╛ рдкреВрд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрджрд┐ рдпрд╣ рдПрдХ рддреНрд░реБрдЯрд┐ рджреЗрддрд╛ рд╣реИ рдпрд╛ рдПрдХ рд░рд┐рдЬреЗрдХреНрдЯ рдХрд░рддрд╛ рд╣реИ, рддреЛ UnhandledPromiseRejectionWarning рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рдХреЙрд▓рдмреИрдХ рдореЗрдВ Async рдлрд╝рдВрдХреНрд╢рдВрд╕Async рдлрд╝рдВрдХреНрд╢рди рдЕрдХреНрд╕рд░ рдХреЙрд▓рдмреИрдХ рдХреЗ рд░реВрдк рдореЗрдВ .map рдпрд╛ .filter рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВред рдПрдХ рдЙрджрд╛рд╣рд░рдг fetchPublicReposCount (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо) рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рдЬреЛ GitHub рдкрд░ рдЦреБрд▓рдиреЗ рд╡рд╛рд▓реЗ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рд╕рдВрдЦреНрдпрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдорд╛рди рд▓реАрдЬрд┐рдП рдХрд┐ рддреАрди рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ рдЬрд┐рдирдХреА рдореАрдЯреНрд░рд┐рдХ рд╣рдореЗрдВ рдЪрд╛рд╣рд┐рдПред рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ:
const url = 'https://api.github.com/users';
рд╣рдореЗрдВ ArfatSalman, octocat, norvig рдХреЗ рдЦрд╛рддреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ:
const users = [ 'ArfatSalman', 'octocat', 'norvig' ]; const counts = users.map(async username => { const count = await fetchPublicReposCount(username); return count; });
рдЖрдкрдХреЛ .map рдХреЙрд▓рдмреИрдХ рдореЗрдВ Await рдкрд░ рдзреНрдпрд╛рди рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╣рд╛рдВ рдорд╛рдпрдиреЗ рд░рдЦрддрд╛ рд╣реИ рд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ .рдореИрдк рдкреНрд░рддреНрдпреЗрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдирд╛рдо рдХреЙрд▓рдмреИрдХ рд╣реИред
рдЕрддреНрдпрдзрд┐рдХ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рд▓рдЧрд╛рддрд╛рд░ рдЙрдкрдпреЛрдЧрдПрдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд░реВрдк рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рд▓реЗрдВ:
async function fetchAllCounts(users) { const counts = []; for (let i = 0; i < users.length; i++) { const username = users[i]; const count = await fetchPublicReposCount(username); counts.push(count); } return counts; }
рдпрд╣рд╛рдВ, рд░реЗрдкреЛ рдирдВрдмрд░ рдХреЛ рдХрд╛рдЙрдВрдЯ рд╡реЗрд░рд┐рдПрдмрд▓ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕ рдирдВрдмрд░ рдХреЛ рдХрд╛рдЙрдВрдЯреНрд╕ рдРрд░реЗ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред рдХреЛрдб рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЬрдм рддрдХ рд╕рд░реНрд╡рд░ рд╕реЗ рдкрд╣рд▓рд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдирд╣реАрдВ рдЖрддрд╛ рд╣реИ, рддрдм рддрдХ рдХреЗ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕реНрдЯреИрдВрдбрдмрд╛рдп рдореЛрдб рдореЗрдВ рд╣реЛрдВрдЧреЗред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдПрдХ рд╣реА рдХреНрд╖рдг рдореЗрдВ, рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╕рдВрд╕рд╛рдзрд┐рдд рд╣реЛрддрд╛ рд╣реИред
рдпрджрд┐, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 300 рдПрдордПрд╕ рд▓рдЧрддреЗ рд╣реИрдВ, рддреЛ рд╕рднреА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рджреВрд╕рд░рд╛ рд╣реИ, рд░реИрдЦрд┐рдХ рд░реВрдк рд╕реЗ рдмрд┐рддрд╛рдпрд╛ рдЧрдпрд╛ рд╕рдордп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рд░рд┐рдкреЙрдЬ рдХреА рд╕рдВрдЦреНрдпрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдПрдХ рджреВрд╕рд░реЗ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕реЗ .map рдФрд░ Promise.all рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
async function fetchAllCounts(users) { const promises = users.map(async username => { const count = await fetchPublicReposCount(username); return count; }); return Promise.all(promises); }
рд╡рд╛рджрд╛ рдореЗрдВ рдЗрдирдкреБрдЯ рдкрд░ рд╡рд╛рджреЗ рдХреА рд╡рд╛рдкрд╕реА рдХреЗ рд╕рд╛рде рд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИред рд╕рд░рдгреА рдореЗрдВ рдпрд╛ рдкрд╣рд▓реЗ рд░рд┐рдЬреЗрдХреНрдЯ рдХреЗ рд╕рднреА рд╡рд╛рджреЗ рдкреВрд░реЗ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЕрдВрддрд┐рдо рдПрдХ рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕рднреА рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╢реБрд░реВ рди рд╣реЛрдВ - рдПрдХ рд╕рд╛рде рд▓реЙрдиреНрдЪ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдк рдкреА-рдореИрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдирд┐рд╖реНрдХрд░реНрд╖
Async рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╡рд┐рдХрд╛рд╕ рдХреЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддреА рдЬрд╛ рд░рд╣реА рд╣реИрдВред рдЦреИрд░, Async-functions рдХреЗ рдЕрдиреБрдХреВрд▓реА рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдпрд╣
Async Iterators рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд╛рдпрдХ рд╣реИред рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЗрд╕рдореЗрдВ рдкрд╛рд░рдВрдЧрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рд╕реНрдХрд┐рд▓рдмреЙрдХреНрд╕ рдЕрдиреБрд╢рдВрд╕рд╛ рдХрд░рддрд╛ рд╣реИ: