рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ

рд╕рднреА рдХреЛ рдирдорд╕реНрдХрд╛рд░, рдФрд░ рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рдкрд┐рдЫрд▓реА рдЫреБрдЯреНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рднреА рдХреЛред рдХрд╛рд░реНрдпрджрд┐рд╡рд╕ рдХреА рдЧрддрд┐ рдмрдврд╝ рд░рд╣реА рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рдмрдврд╝рддреА рдЬрд╛рдирдХрд╛рд░реА рд╣рдореЗрдВ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣реА рд╣реИред рд╕рд╛рдордиреЗ рдХреЗ рдЫреЛрд░ рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рд╕реЛ рдирд╣реАрдВ рд░рд╣реА рд╣реИ рдФрд░ рдЖрдиреЗ рд╡рд╛рд▓реЗ рд╡рд░реНрд╖ рдореЗрдВ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрдИ рдЖрд╢реНрдЪрд░реНрдп рдХреА рддреИрдпрд╛рд░реА рдХрд░ рд░рд╣реА рд╣реИ, рдФрд░ рдореЗрд░рд╛ рд╡рд┐рд╢реНрд╡рд╛рд╕ рдХрд░реЛ, рдХреЛрдИ рднреА рдКрдм рдирд╣реАрдВ рд╣реЛрдЧрд╛ред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдореВрд╣реЛрдВ рдХреЗ рд╕рд╛рде рдорд┐рд▓рдХрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рдХреА рдЬрд╛ рд░рд╣реА рдирдИ рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ - рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкреНрд░реЛрдорд┐рд╕ (рдЕрдиреБрд╡рд╛рдж рдореЗрдВ рдЗрд╕рдХреЗ рдмрд╛рдж - рд╡рд╛рджреЗ, рдХреГрдкрдпрд╛ рдЬреНрдпрд╛рджрд╛ рдордд рдорд╛рд░реЛ) - рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдЬрд┐рд╕реЗ рдХрдИ рд▓реЛрдЧ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рдореВрд▓ рд╕рдорд░реНрдерди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред рдХреНрдпрд╛ рд╡рд╛рджреЗ рд╣реИрдВ рдФрд░ рд╡реЗ рдХреНрдпрд╛ рдЦрд╛рддреЗ рд╣реИрдВ, рдпрд╣ рдЬреЗрдХ рдЖрд░реНрдЪреАрдмрд╛рд▓реНрдб рдХреЗ рдПрдХ рдЕрджреНрднреБрдд рд▓реЗрдЦ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд╡рд╛рдж (рдереЛрдбрд╝рд╛ рдореБрдХреНрдд) рдореЗрдВ рдкрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред



рджреЗрд╡рд┐рдпреЛрдВ рдФрд░ рд╕рдЬреНрдЬрдиреЛрдВ, рд╡реЗрдм рд╡рд┐рдХрд╛рд╕ рдХреА рджреБрдирд┐рдпрд╛ рдореЗрдВ рдПрдХ рднрд╡реНрдп рдЖрдпреЛрдЬрди рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реЛ рдЬрд╛рдЗрдП ...

[рдбреНрд░рдо рд░реЛрд▓]

рд╡рд╛рджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рджреЗрд╢реА рдмрди рдЬрд╛рддреЗ рд╣реИрдВ!

[рд╣рд░ рдЬрдЧрд╣ рдЖрддрд┐рд╢рдмрд╛рдЬреА рдХреА рдЧрд░реНрдЬрдирд╛, рднреАрдбрд╝ рдЦреБрд╢ рд╣реЛ рдЬрд╛рддреА рд╣реИ]

рдлрд┐рд▓рд╣рд╛рд▓, рдЖрдкрдХреЛ рдирд┐рдореНрди рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рдард╣рд░рд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:


рд╣рд░ рдХреЛрдИ рдХреНрдпреЛрдВ рдирд╛рдЪ рд░рд╣рд╛ рд╣реИ?


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

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

рд╕рдВрднрд╡рддрдГ, рдЗрд╕рд╕реЗ рдЦреБрдж рдХреЛ рдмрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдиреЗ рдПрдХ рдЗрд╡реЗрдВрдЯ рдореЙрдбрд▓ рдФрд░ рдХреЙрд▓рдмреИрдХ рдХреА рдПрдХ рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:

var img1 = document.querySelector('.img-1'); img1.addEventListener('load', function() { // ,   }); img1.addEventListener('error', function() { // ,   }); 


рдХреЛрдИ рдЕрд╡рд░реЛрдзрдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИред рд╣рдордиреЗ рдПрдХ рдЫрд╡рд┐ рд▓реА, рдЙрд╕ рдкрд░ рд╢реНрд░реЛрддрд╛рдУрдВ рдХреА рдПрдХ рдЬреЛрдбрд╝реА рд▓рдЯрдХрд╛ рджреА, рдФрд░ рд╡рд╣ рдпрд╣ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЬрдм рддрдХ рдХрд┐ рдХреЛрдИ рдШрдЯрдирд╛ рдирд╣реАрдВ рд╣реЛ рдЬрд╛рддреА, рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрдиреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд░реЛрдХ рд╕рдХрддрд╛ рд╣реИред

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

 var img1 = document.querySelector('.img-1'); function loaded() { // ,   } if (img1.complete) { loaded(); } else { img1.addEventListener('load', loaded); } img1.addEventListener('error', function() { // ,   }); 


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

рдЗрд╡реЗрдВрдЯ рд╣рдореЗрд╢рд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реЛрддреЗ рд╣реИрдВред


рдЬрдм рд╣рдо рдПрдХ рддрддреНрд╡ рдкрд░ рдХрдИ рджреЛрд╣рд░рд╛рдИ рдЬрд╛рдиреЗ рд╡рд╛рд▓реА рдШрдЯрдирд╛рдУрдВ рдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рд╢реНрд░реЛрддрд╛ рдПрдХ рдорд╣рд╛рди рдЪреАрдЬ рд╣реЛрддреЗ рд╣реИрдВ - рдХреАрдк, рдЯрдЪрд╕реНрдЯрд╛рд░реНрдЯ рдЖрджрд┐ред рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдШрдЯрдирд╛рдУрдВ рд╕реЗ, рдЖрдк рдЗрд╕ рдмрд╛рдд рд╕реЗ рдмрд╣реБрдд рдЪрд┐рдВрддрд┐рдд рдирд╣реАрдВ рд╣реИрдВ рдХрд┐ рд╣реИрдВрдбрд▓рд░ рдХреЛ рд▓рдЯрдХрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдХреНрдпрд╛ рд╣реЛрдЧрд╛ред рд▓реЗрдХрд┐рди рдЬрдм рдЖрдкрдХреЛ рдкрдХрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо (рд╕рдлрд▓рддрд╛ / рд╡рд┐рдлрд▓рддрд╛) рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд▓реЛрдбрд┐рдВрдЧ, рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ рдЖрдк рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХреБрдЫ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ:

  img1.callThisIfLoadedOrWhenLoaded(function() { //  }).orIfFailedCallThis(function() { //  }); // тАж whenAllTheseHaveLoaded([img1, img2]).callThis(function() { //   }).orIfSomeFailedCallThis(function() { //     }); 


рдпрд╣ рд╡рд╣реА рд╣реИ рдЬреЛ рд╡рд╛рджреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдореНрдореЗрджрд╛рд░ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЕрдзрд┐рдХ рд╕реБрд╕рдВрдЧрдд рдФрд░ рд╢рдмреНрджрд╛рд░реНрде рдирд╛рдореЛрдВ рдХреЗ рддрд╣рддред рдпрджрд┐ HTML рдЫрд╡рд┐ рдореЗрдВ рдПрдХ ready рддрд░реАрдХрд╛ рдерд╛ рдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 img1.ready().then(function() { //  }, function() { //    }); // тАж Promise.all([img1.ready(), img2.ready()]).then(function() { //   }, function() { //      }); 


рдЗрд╕рдХреЗ рдореВрд▓ рдореЗрдВ, рдЗрд╕рдХреЗ рдЕрдкрд╡рд╛рдж рдХреЗ рд╕рд╛рде рд╡рд╛рджреЗ рдШрдЯрдирд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╣реИрдВ:



рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдмреЗрд╣рдж рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдХреА рд░реБрдЪрд┐ рддрдм рдирд╣реАрдВ рд╣реЛрддреА рдЬрдм рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рд╡рд╣рд╛рдВ рд╣реБрдЖ рдерд╛, рд▓реЗрдХрд┐рди рдЬреЛ рд╣реБрдЖ, рдЙрд╕рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛ рджрд┐рд▓рдЪрд╕реНрдк рд╣реИред

рд╡рдЪрди рд╢рдмреНрджрд╛рд╡рд▓реА


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

рдПрдХ рд╡рд╛рджрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:



then рдкрджреНрдзрддрд┐ рдХреЗ рд╕рдорд╛рди рд╡рд╕реНрддреБ рдХреЗ рд╡рд╛рджреЗ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди thenable рд╢рдмреНрдж рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рд╢рдмреНрдж рдореБрдЭреЗ рдкреВрд░реНрд╡-рдЕрдВрдЧреНрд░реЗрдЬреА рдлреБрдЯрдмреЙрд▓ рдкреНрд░рдмрдВрдзрдХ рдЯреЗрд░реА рд╡реЗрдирдмрд▓реНрд╕ рдХреА рдпрд╛рдж рджрд┐рд▓рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рд╢рд╛рдпрдж рд╣реА рдХрднреА рдХрд░реВрдВрдЧрд╛ред

рд╡рд╛рджрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдмрдирд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ!


рдЗрди рдЬреИрд╕реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рд╡рд╛рджреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╣рдореЗрдВ рдШреЗрд░реЗ рд╣реБрдП рд╣реИрдВ:



рдКрдкрд░ рдХреЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдирд┐рд░реНрдорд┐рдд рдЙрди рдорд╛рдирдХреАрдХреГрдд рд╡рд╛рджреЛрдВ / A + рд╡рд┐рдирд┐рд░реНрджреЗрд╢рди рдореЗрдВ рд╡рд░реНрдгрд┐рдд рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВред рдпрджрд┐ рдЖрдк jQuery рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЗрд╕рдореЗрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ Deffered рдирд╛рдордХ рдХреБрдЫ рд╣реИред рдЬреЛ рдХреБрдЫ рднреА рдерд╛, рдбреЗрдлрд░реНрдб рдХреЗ рд╡рд╛рджреЗ / рдП + рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде рдереЛрдбрд╝рд╛ рдЕрд╕рдВрдЧрдд рд╣реИрдВ, рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдХрдо рдЙрдкрдпреБрдХреНрдд рдмрдирд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдкрдиреЗ рдХрд╛рди рдХреЛ рддреЗрдЬ рд░рдЦреЗрдВред JQuery рднреА рдкреНрд░рдХрд╛рд░ рдХрд╛ рд╡рд╛рджрд╛ рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ Deffered рдХреЗ рдЦреЗрддреЛрдВ рдХрд╛ рдПрдХ рд╕рдмрд╕реЗрдЯ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдорд╛рди рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реИрдВред

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпреЗ рд╕рднреА рд╡рд╛рджреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд╛рдирдХ рдХрд╛ рдкрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рдПрдкреАрдЖрдИ рдЕрд▓рдЧ рд╣реИрдВред рдореВрд▓ рд╡рд╛рджрд╛ API RSVP.js. рдХреЗ рд╕рдорд╛рди рд╣реИред

 var promise = new Promise(function(resolve, reject) { //    ,   , тАж if (/* ..    */) { resolve("!"); } else { reject(Error("")); } }); 


рд╡рд╛рджрд╛ рдирд┐рд░реНрдорд╛рддрд╛ рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ - рджреЛ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рдХреЙрд▓рдмреИрдХ рдлрд╝рдВрдХреНрд╢рди: resolve рдФрд░ reject ред рдпрд╣ рд╕рд░рд▓ рд╣реИ, рдЖрдк рдХреЙрд▓рдмреИрдХ рдХреЗ рдЕрдВрджрд░ рдХреЛрдИ рднреА рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХрд░рддреЗ рд╣реИрдВ, рдлрд┐рд░ рдЖрдк рд╕рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ resolve рдХрд╣рддреЗ рд╣реИрдВ, рдпрд╛ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ reject ред

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

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╡рд╛рджрд╛ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

 promise.then(function(result) { console.log(result); // " !" }, function(err) { console.log(err); // : "" }); 


рдбреЛрдо рдореЗрдВ рд╡рд╛рджреЗ рдХрд╛ рдорд╛рдирдХреАрдХрд░рдг "рдлреНрдпреВрдЪрд░реНрд╕" рдХреЗ рд░реВрдк рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ, рдмрд╛рдж рдореЗрдВ рдЗрд╕рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ "рд╡рд╛рджрд╛" рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛, рдФрд░ рдЕрдВрдд рдореЗрдВ рдЗрд╕реЗ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ред рдореБрдЦреНрдп рд░реВрдк рд╕реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдореЙрдбрд▓ рд╕реЗ рдЕрд▓рдЧ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╡рд╛рджреЗ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рд╡рд┐рдЪрд╛рд░ рд╕реБрдВрджрд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЙрдиреНрд╣реЗрдВ рдЧреИрд░-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд╛рддрд╛рд╡рд░рдг рдЬреИрд╕реЗ рдХрд┐ Node.js. рдореЗрдВ рдкрд╣реБрдБрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рд╣рд╛рд▓рд╛рдБрдХрд┐ рд╡реЗ рд╡рд┐рд╢реБрджреНрдз рд░реВрдк рд╕реЗ рдПрдХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реБрд╡рд┐рдзрд╛ рдореЗрдВ рдмрджрд▓ рдЧрдП, рд▓реЗрдХрд┐рди рдбреЛрдо рдЙрдиреНрд╣реЗрдВ рдкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдВрдХреЛрдЪ рдирд╣реАрдВ рдХрд░рддреЗред рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдкрд░ рдЖрдзрд╛рд░рд┐рдд рдСрд▓-рдиреНрдпреВ DOM API, рдкреНрд░реЙрдорд┐рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ред рдЕрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХреЛрдЯрд╛ рдкреНрд░рдмрдВрдзрди , рдлреЙрдиреНрдЯ рд▓реЛрдб рдЗрд╡реЗрдВрдЯреНрд╕ , рд╕рд░реНрд╡рд┐рд╕рд╡реЙрдХрд░ , рд╡реЗрдм рдорд┐рдбреА , рд╕реНрдЯреНрд░реАрдо рдФрд░ рдЕрдиреНрдп рдПрдкреАрдЖрдИ рдХреЗ рд╕рд╛рде рд╣реЛ рд░рд╣рд╛ рд╣реИред

рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛ рд╕рдорд░реНрдерди


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

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

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

рд╡рд╛рджреЛрдВ рдХреЛ рдареАрдХ рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╛ рдЕрдиреНрдп рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдФрд░ Node.js рдХреЗ рд╡рд╛рджреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдПрдХ рдкреЙрд▓реАрдлрд╝рд┐рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдЕрдиреНрдп рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрдЧрддрддрд╛


рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╡рд╛рджрд╛ рдПрдкреАрдЖрдИ then рд╡рд┐рдзрд┐ рдХреЗ рдмрд┐рдирд╛ рдкреВрд░рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рдЬреИрд╕реА рд╡рд╕реНрддреБ рдХреЗ рд╕рд╛рде рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рд╡рд╛рджрд╛ рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдЗрд╕реЗ рддрдм рднреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ)ред рдПрдХ Promise.cast рд╡рд┐рдзрд┐ рднреА рд╣реИ рдЬреЛ рдЗрдирд▓рд╛рдЗрди рдФрд░ рдХрд╕реНрдЯрдо рдкреНрд░реЙрдорд┐рд╕ рдЬреИрд╕реА рд╡рд╕реНрддреБрдУрдВ рдХреЗ рдмреАрдЪ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдорд┐рдЯрд╛ рджреЗрддреА рд╣реИред рдЗрд╕рд▓рд┐рдП, рдпрджрд┐ рдЖрдк рдПрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдХрд┐ Q рдЬреИрд╕реЗ рд╡рд╛рджреЗ рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рддреЛ рдареАрдХ рд╣реИ, рд╡реЗ рдореВрд▓ JavaScrip рд╡рд╛рджреЛрдВ рдХреЗ рд╕рд╛рде рдареАрдХ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗред

рд▓реЗрдХрд┐рди, рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдЪреЗрддрд╛рд╡рдиреА рджреА рдереА, JQuery рдХреЗ рдбрд┐рдлреНрд░реЗрдбреНрд╕ рдереЛрдбрд╝рд╛ рдЕрд▓рдЧ рд╣реИрдВ ... рдЕрд▓рдЧред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЖрдк рдЙрдиреНрд╣реЗрдВ рдорд╛рдирдХ рдкрд░ рд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 var jsPromise = Promise.cast($.ajax('/whatever.json')); 


рдпрд╣рд╛рдВ jQuery рдХрд╛ Riva $.ajax рд╡рд╛рдкрд╕ рдЖ рдЧрдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рддрдХ рдпрд╣ рдПрдХ then рд╡рд┐рдзрд┐ рд╣реИ, Promist.cast рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╡рд╛рджрд╛ рдореЗрдВ рдмрджрд▓ рд╕рдХрддрд╛ рд╣реИред рдЬреИрд╕рд╛ рдХрд┐ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдХрдИ рдмрд╛рд░, Deffered рдиреЗ рдЕрдкрдиреЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдмрд╣реБрдд рд╕реЗ рддрд░реНрдХ рджрд┐рдП:

 var jqDeferred = $.ajax('/whatever.json'); jqDeferred.then(function(response, statusText, xhrObj) { // ... }, function(xhrObj, textStatus, err) { // ... });     JS     : jsPromise.then(function(response) { // ... }, function(xhrObj) { // ... }); 


рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЬреНрдпрд╛рджрд╛рддрд░ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдпрд╣ рд╡рд╣реА рд╣реЛрддрд╛ рд╣реИ рдЬрд┐рд╕рдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЙрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдпрд╣ рдЬрд╛рдирдирд╛ рднреА рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ reject рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП jQuery рдХреЛ рдХрд┐рд╕реА рддреНрд░реБрдЯрд┐ рд╡рд╕реНрддреБ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдореНрдореЗрд▓рди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИ


рддреЛ, рдЪрд▓реЛ рдХреБрдЫ рдЪреАрдЬреЛрдВ рдХреЛ рдХреЛрдб рдХрд░рддреЗ рд╣реИрдВред рдорд╛рди рд▓реЗрдВ рдХрд┐ рд╣рдо рдЪрд╛рд╣рддреЗ рд╣реИрдВ:

  1. рд▓реЛрдб рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдШреВрд░реНрдгрди рдЖрдЗрдХрди рджрд┐рдЦрд╛рдПрдВ
  2. рдПрдХ рдХрд╣рд╛рдиреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ JSON рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдЕрдзреНрдпрд╛рдп рдХреЗ рд▓рд┐рдП рдПрдХ рд╢реАрд░реНрд╖рдХ рдФрд░ URL рдХрд╛ рд╕рдВрдЧреНрд░рд╣ рд╣реЛ
  3. рдкреГрд╖реНрда рдореЗрдВ рд╢реАрд░реНрд╖рдХ рдЬреЛрдбрд╝реЗрдВ
  4. рд╕рднреА рдЕрдзреНрдпрд╛рдпреЛрдВ рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
  5. рдЙрди рд╕рднреА рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдВ
  6. рдбрд╛рдЙрдирд▓реЛрдб рд╕реВрдЪрдХ рдЫреБрдкрд╛рдПрдВ


... рдФрд░ рдЕрдЧрд░ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЧрдпрд╛ рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░реЗрдВред рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдмрд╛рдж рд╕рдВрдХреЗрддрдХ рдХреЛ рд░реЛрдХрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддрд╛рдХрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реНрдерд╛рдпреА рд░реЛрдЯреЗрд╢рди рд╕реЗ рдЪрдХреНрдХрд░ рдЖрдиреЗ рдХрд╛ рдХрд╛рд░рдг рди рд╣реЛред

рдмреЗрд╢рдХ, рдЖрдк рдЙрд╕ рд╕рд╛рдордЧреНрд░реА рдХреЛ рдбрд╛рдпрдирд╛рдорд┐рдХ рд░реВрдк рд╕реЗ рд▓реЛрдб рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдЬреЛ HTML рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреЗрдЬрд╝ рд╣реИ , рд▓реЗрдХрд┐рди рддреГрддреАрдп-рдкрдХреНрд╖ API рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╕рдордп рд╣рдорд╛рд░рд╛ рдЯреЗрдореНрдкрд▓реЗрдЯ рдЕрдЪреНрдЫрд╛ рд╣реИ: рдЖрдк рдмрд╣реБрдд рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рддрдм рдЖрдк рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдк рдЙрди рд╕рднреА рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред

рд╢реБрд░реВ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдЖрдЗрдП рдЬрд╛рдиреЗрдВ рдХрд┐ рд╣рдо рдиреЗрдЯрд╡рд░реНрдХ рд╕реЗ рдбреЗрдЯрд╛ рдХреИрд╕реЗ рдЦреАрдВрдЪреЗрдВрдЧреЗред

XMLHttpRequest рдПрдХ рд╡рд╛рджрд╛ рдХрд░рддрд╛ рд╣реИ


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

 function get(url) { //   . return new Promise(function(resolve, reject) { //   XHR  var req = new XMLHttpRequest(); req.open('GET', url); req.onload = function() { //      404'  //     if (req.status == 200) { //      resolve(req.response); } else { // ,     //       reject(Error(req.statusText)); } }; //    req.onerror = function() { reject(Error("Network Error")); }; //   req.send(); }); } 


рдЕрдм рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ:

 get('story.json').then(function(response) { console.log("!", response); }, function(error) { console.error("!", error); }); 


рдЕрдм рд╣рдо XMLHttpRequest рдЯрд╛рдЗрдк рдХрд┐рдП рдмрд┐рдирд╛ HTTP рдЕрдиреБрд░реЛрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдореБрдЭреЗ рдмрд╣реБрдд рдЦреБрд╢ рдХрд░рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ XMLHttpRequest рдХреЗ рдКрдВрдЯ рд╕рдВрдХреЗрддрди рдХрд╛ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореЗрд░реЗ рдЬреАрд╡рди рдХреЛ рд╡рд┐рд╖рд╛рдХреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИред

рдХреЙрд▓ рдЪреЗрди


then рдпрд╣ рдХрд╣рд╛рдиреА рдХрд╛ рдЕрдВрдд рдирд╣реАрдВ рд╣реИ, рдЖрдк then рдХреЙрд▓-рдЯреВ-рдПрдВрдб-рдПрдВрдб-рдЯреВ-рдЯреНрд░рд╛рдВрд╕рдлрд╝реЙрд░реНрдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реМрдЯреЗ рдореВрд▓реНрдпреЛрдВ рдХреЛ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдПрдХ рдХреЗ рдмрд╛рдж рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдореВрд▓реНрдп рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг

рдЖрдк рдХреЗрд╡рд▓ рдПрдХ рдирдпрд╛ рд░рд┐рдЯрд░реНрди рджреЗрдХрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХреЗ рд╕рд╛рде рдореВрд▓реНрдп рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 var promise = new Promise(function(resolve, reject) { resolve(1); }); promise.then(function(val) { console.log(val); // 1 return val + 2; }).then(function(val) { console.log(val); // 3 }); 


рдЕрдзрд┐рдХ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╣рдо рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ:

 get('story.json').then(function(response) { console.log("!", response); }); 


рдЗрд╕рдХрд╛ рдЬрд╡рд╛рдм рд╣рдореЗрдВ JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╕рд╛рдордЧреНрд░реА рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рдкрд╛рда рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрдкрдиреЗ рдЙрддреНрддрд░ рдХреА responseType рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╣рдо рдЗрд╕реЗ рд╡рд╛рджреЛрдВ рдХреА рдЕрджреНрднреБрдд рджреБрдирд┐рдпрд╛ рд╕реЗ рд╕реИрд░ рдХреЗ рд▓рд┐рдП рднреА рднреЗрдЬ рд╕рдХрддреЗ рд╣реИрдВ:

 get('story.json').then(function(response) { return JSON.parse(response); }).then(function(response) { console.log("  JSON!", response); }); 


рд╡реИрд╕реЗ, JSON.parse рдПрдХ рддрд░реНрдХ рд▓реЗрддрд╛ рд╣реИ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдореВрд▓реНрдп рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рдФрд░ рд╣рдо рдмрд╕ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рд▓рд┐рдВрдХ рджреЗ рд╕рдХрддреЗ рд╣реИрдВ:

 get('story.json').then(JSON.parse).then(function(response) { console.log("  JSON!", response); }); 


рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдо рдЖрд╕рд╛рдиреА рд╕реЗ рдЪреАрдиреА getJSON рдлрд╝рдВрдХреНрд╢рди рдХреЛ рд╕реНрдХреЗрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 function getJSON(url) { return get(url).then(JSON.parse); } 


getJSON рдЕрднреА рднреА рдПрдХ рд╡рд╛рджрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдбреЗрдЯрд╛ рдХреЛ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИ рдФрд░ JSON рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рддрд╛ рд╣реИред

рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдШрдЯрдирд╛ рдХрддрд╛рд░

then рдЖрдк рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

 getJSON('story.json').then(function(story) { return getJSON(story.chapterUrls[0]); }).then(function(chapter1) { console.log("  !", chapter1); }); 


рдпрд╣рд╛рдВ рд╣рдо story.json рд▓рд┐рдП рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдЬрдм рд╣рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ URL рдХрд╛ рдПрдХ рд╕реЗрдЯ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рд╣рдо рдЙрдирдореЗрдВ рд╕реЗ рдкрд╣рд▓реЗ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рд╣рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдПрдХ рд╕реЗрдм рдПрдХ рд╕реЗрдм рдХреЗ рдкреЗрдбрд╝ рд╕реЗ рдХрд┐рддрдиреА рджреВрд░ рд╡рд╛рдкрд╕ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╕рд╛рдорд╛рдиреНрдп рдХреЙрд▓рдмреИрдХ рдкреИрдЯрд░реНрди рдкрд░ рд╡рд╛рджреЛрдВ рдХрд╛ рд▓рд╛рдн рдЖрдкрдХреА рдЖрдВрдЦреЛрдВ рдХреЛ рдиреБрдХрд╕рд╛рди рдкрд╣реБрдВрдЪрд╛рддрд╛ рд╣реИред рдЖрдк рд▓реЗрдЦ рдЕрдиреБрд░реЛрдз рдХреЗ рддрд░реНрдХ рдХреЛ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рдзрд┐ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 var storyPromise; function getChapter(i) { storyPromise = storyPromise || getJSON('story.json'); return storyPromise.then(function(story) { return getJSON(story.chapterUrls[i]); }) } //     : getChapter(0).then(function(chapter) { console.log(chapter); return getChapter(1); }).then(function(chapter) { console.log(chapter); }); 


рд╣рдо story.json рд▓реЛрдб рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред рдЬрдм рддрдХ рдХрд┐ рдкрд╣рд▓реА рдХреЙрд▓ рдХреЛ getChapter , рдФрд░ рдирд┐рдореНрди рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП getChapter рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд╡рд╛рджреЗ рдХрд╛ рдкреБрди: рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдкрд╣рд▓реЗ рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдФрд░ рдЕрддрд┐рд░рд┐рдХреНрдд рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдУрд╣, рдпреЗ рд╡рд╛рджреЗ!

рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдореЗрдВ рддреНрд░реБрдЯрд┐


рдЬреИрд╕рд╛ рдХрд┐ рд╣рдордиреЗ рдкрд╣рд▓реЗ рджреЗрдЦрд╛, then рджреЛ рддрд░реНрдХ рд▓реЗрддреЗ рд╣реИрдВ, рдПрдХ рд╕рдлрд▓ рд╕рдорд╛рдкрди рдХреЗ рд▓рд┐рдП, рджреВрд╕рд░рд╛ рддреНрд░реБрдЯрд┐ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ (рд╡рд╛рджреЛрдВ рдХреА рд╢рдмреНрджрд╛рд╡рд▓реА рдореЗрдВ рдкреВрд░реНрдг рдФрд░ рдЕрд╕реНрд╡реАрдХрд╛рд░):

 get('story.json').then(function(response) { console.log("!", response); }, function(error) { console.log("!", error); }); 


рдЖрдк catch рднреА рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 get('story.json').then(function(response) { console.log("!", response); }).catch(function(error) { console.log("!", error); }); 


рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЦрд╛рд╕ рдирд╣реАрдВ рд╣реИ, рдпрд╣ then(undefined, func) рд▓рд┐рдП рдЕрдзрд┐рдХ рдкрдардиреАрдп рдЪреАрдиреА рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдКрдкрд░ рджрд┐рдП рдЧрдП рдХреЛрдб рдХреЗ рджреЛ рдЯреБрдХрдбрд╝реЗ рд╕рдорд╛рди рдирд╣реАрдВ рд╣реИрдВ; рдЙрддреНрддрд░рд╛рд░реНрджреНрдз рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИ:

  get('story.json').then(function(response) { console.log("!", response); }).then(undefined, function(error) { console.log("!", error); }); 


рдпрд╣ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЫреЛрдЯрд╛ рдЕрдВрддрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдмрд╣реБрдд рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╣реИред рдПрдХ рд╡рд╛рджрд╛ (рдЕрд╕реНрд╡реАрдХреГрддрд┐) рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ then рдХреЙрд▓ рдХреА рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ (рдпрд╛ catch , рдЬреЛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдмрд╛рдд рд╣реИ) рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рд╣реИрдВрдбрд▓рд░ рдХрд╛ рд╕рд╛рдордирд╛ рди рдХрд░реЗред then(func1, func2) рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, func1 рдФрд░ func2 рджреЛрдиреЛрдВ рдХреЛ рдХрднреА рдирд╣реАрдВ рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди then(func1).catch(func2) рд╢реНрд░реГрдВрдЦрд▓рд╛ рдореЗрдВ, рджреЛрдиреЛрдВ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╡рд╛рджрд╛ func1 ред рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рдордЬрд╝реЗ рдХрд░реЗрдВ:

 asyncThing1().then(function() { return asyncThing2(); }).then(function() { return asyncThing3(); }).catch(function(err) { return asyncRecovery1(); }).then(function() { return asyncThing4(); }, function(err) { return asyncRecovery2(); }).catch(function(err) { console.log("Don't worry about it"); }).then(function() { console.log("All done!"); }); 


рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдорд╛рдирдХ try/catch рд╕рдорд╛рди рд╣реИ, try рдмреНрд▓реЙрдХ рдореЗрдВ рд╣реБрдИ рддреНрд░реБрдЯрд┐ рддреБрд░рдВрдд catch рдкрд╛рд░рд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИред рдпрд╣рд╛рдБ рдКрдкрд░ рдХреЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ (рдореИрдВ рдлрд╝реНрд▓реЛрдЪрд╛рд░реНрдЯ рд╕реЗ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реВрдБ) рдХрд╛ рдПрдХ рдлрд╝реНрд▓реЛрдЪрд╛рд░реНрдЯ рд╣реИ:

рдЫрд╡рд┐

рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реНрдг рдХрд┐рдП рдЧрдП рд╡рд╛рджреЗ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд▓рд╛рд▓ рддреАрд░ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣рд░реЗ рддреАрд░ рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВред

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЕрдкрд╡рд╛рдж рдФрд░ рд╡рд╛рджреЗ

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

 var jsonPromise = new Promise(function(resolve, reject) { // JSON.parse     //  JSON,     reject': resolve(JSON.parse("This ain't JSON")); }); jsonPromise.then(function(data) { //     : console.log("!", data); }).catch(function(err) { //   : console.log("!", err); }); 


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

рдПрдХ рд╣реА рдмрд╛рдд рддрдм рд╣реЛрдЧреА рдЬрдм рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

 get('/').then(JSON.parse).then(function() { //    , '/'     JSON //   JSON.parse   console.log("!", data); }).catch(function(err) { //   : console.log("!", err); }); 


рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдкрдЯрдиреЗ

рд╣рдорд╛рд░реА рдХрд╣рд╛рдиреА рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЕрдзреНрдпрд╛рдпреЛрдВ рдореЗрдВ рд╡рд┐рдЦрдВрдбрд┐рдд, рд╣рдо рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП catch рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 getJSON('story.json').then(function(story) { return getJSON(story.chapterUrls[0]); }).then(function(chapter1) { addHtmlToPage(chapter1.html); }).catch(function() { addTextToPage("  "); }).then(function() { document.querySelector('.spinner').style.display = 'none'; }); 


рдЕрдЧрд░ story.chapterUrls[0] рд▓рд┐рдП рдЕрдиреБрд░реЛрдзред , рдХреЛ рднреА рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдирд┐рд╖реНрдкрд╛рджрди рддреБрд░рдВрдд рдкрд╣рд▓реА рддреНрд░реБрдЯрд┐ рдкреНрд░рд╕рдВрд╕реНрдХрд░рдг рдХреЙрд▓рдмреИрдХ рдкрд░ рдЬрд╛рдПрдЧрд╛ред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ "рдЕрдзреНрдпрд╛рдп рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрде" рд╕рдВрджреЗрд╢ рдХреЛ рджреЗрдЦреЗрдЧрд╛ рдпрджрд┐ рдкрд┐рдЫрд▓реЗ рдХреЙрд▓рдмреИрдХ рдореЗрдВ рд╕реЗ рдХрд┐рд╕реА рдореЗрдВ рдХреБрдЫ рдЧрд▓рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред

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

 try { var story = getJSONSync('story.json'); var chapter1 = getJSONSync(story.chapterUrls[0]); addHtmlToPage(chapter1.html); } catch (e) { addTextToPage("  "); } document.querySelector('.spinner').style.display = 'none'; 


рд╢рд╛рдпрдж рдЖрдк рдереЛрдбрд╝реА рджреЗрд░ рдкрд╣рд▓реЗ рддреНрд░реБрдЯрд┐ рдХреЛ рдкрдХрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд▓реЙрдЧ рдЗрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рддреНрд░реБрдЯрд┐ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░реЗрдВред рд╣рдо рдЗрд╕реЗ рдЕрдкрдиреЗ getJSON рд╡рд┐рдзрд┐ рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 function getJSON(url) { return get(url).then(JSON.parse).catch(function(err) { console.log("getJSON  ", url, err); throw err; }); } 


рдЗрд╕рд▓рд┐рдП, рд╣рдо рдПрдХ рдЕрдзреНрдпрд╛рдп рд▓рд╛рдиреЗ рдореЗрдВ рд╕рдлрд▓ рд░рд╣реЗ, рд▓реЗрдХрд┐рди рд╣рдо рдЙрди рд╕рднреА рдХреЛ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВред

рдХрдВрд╕реАрдбрд░ рдФрд░ рдХрддрд╛рд░ - рджреЛрдиреЛрдВ рдХрд╛ рд╕рд░реНрд╡рд╢реНрд░реЗрд╖реНрда рд▓реЗрдВ


рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рд╕реЛрдЪрдирд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдПрдХ рдореГрдд рдЕрдВрдд рдореЗрдВ рд╣реИрдВ, рддреЛ рдХреЛрдб рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдЬреИрд╕реЗ рдХрд┐ рдпрд╣ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╣реИ:

 try { var story = getJSONSync('story.json'); addHtmlToPage(story.heading); story.chapterUrls.forEach(function(chapterUrl) { var chapter = getJSONSync(chapterUrl); addHtmlToPage(chapter.html); }); addTextToPage("All done"); } catch (err) { addTextToPage("- : " + err.message); } document.querySelector('.spinner').style.display = 'none'; 


рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ ! рд▓реЗрдХрд┐рди рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд╕рд┐рдВрдХреНрд░реЛрдирд╛рдЗрдЬрд╝ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдмреВрдЯ рд╕рдордп рдкрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмреНрд▓реЙрдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕ рдХреЛрдб рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо then рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред

 getJSON('story.json').then(function(story) { addHtmlToPage(story.heading); // TODO:       story.chapterUrls }).then(function() { //    ! addTextToPage(" "); }).catch(function(err) { //   ,     addTextToPage("- : " + err.message); }).then(function() { //     document.querySelector('.spinner').style.display = 'none'; }); 


рд▓реЗрдХрд┐рди рд╣рдо рдХреНрд░рдо рдореЗрдВ рд╕рднреА рдЕрдзреНрдпрд╛рдпреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХреИрд╕реЗ рдкрд╣реБрдВрдЪрддреЗ рд╣реИрдВ? рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛:

 story.chapterUrls.forEach(function(chapterUrl) { //   getJSON(chapterUrl).then(function(chapter) { //      addHtmlToPage(chapter.html); }); }); 


forEach рдХрд╛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕реЗ рдХреЛрдИ рд▓реЗрдирд╛-рджреЗрдирд╛ рдирд╣реАрдВ рд╣реИ, рдФрд░ рд╣рдорд╛рд░реЗ рдЕрдзреНрдпрд╛рдпреЛрдВ рдХреЛ рдкреЗрдЬ рдкрд░ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдХреНрд░рдо рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рдПрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рд▓реЛрдб рдХрд░рддреЗ рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ "рдкрд▓реНрдк рдлрд┐рдХреНрд╢рди" рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛ред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдкрд▓реНрдк рдлрд┐рдХреНрд╢рди рдирд╣реАрдВ рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдареАрдХ рдХрд░рддреЗ рд╣реИрдВ ...

рд╣рдордиреЗ рд╕рдм рдХреБрдЫ рдХрддрд╛рд░ рдореЗрдВ рд▓рдЧрд╛ рджрд┐рдпрд╛

рд╣рдо рд╡рд╛рджреЗ рдХреА рдХрддрд╛рд░ рдореЗрдВ рдЕрдкрдиреЗ chaptersUrls рдХреЛ рд░рдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╣рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 //    ,     var sequence = Promise.resolve(); //      story.chapterUrls.forEach(function(chapterUrl) { //       sequence = sequence.then(function() { return getJSON(chapterUrl); }).then(function(chapter) { addHtmlToPage(chapter.html); }); }); 


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

рдПрдХ Promise.reject(val) рд╡рд┐рдзрд┐ рднреА рд╣реИ, Promise.reject(val) , рдЬреЛ рдПрдХ рд╡рд╛рджрд╛ рджреЗрддрд╛ рд╣реИ рдЬреЛ рдЙрд╕ рдореВрд▓реНрдп рдХреЗ рд╕рд╛рде рдПрдХ рддреНрд░реБрдЯрд┐ рдХреЗ рд╕рд╛рде Promise.reject(val) рдЬрд┐рд╕реЗ рдЖрдк рдЗрд╕реЗ (рдпрд╛ undefined ) рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред

рд╣рдо array.reduce рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рдЫреЛрдЯрд╛ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 //      story.chapterUrls.reduce(function(sequence, chapterUrl) { //       return sequence.then(function() { return getJSON(chapterUrl); }).then(function(chapter) { addHtmlToPage(chapter.html); }); }, Promise.resolve()); 


рдпрд╣рд╛рдВ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд╕рдорд╛рди рд╣реА рдмрд╛рдд рд╣реЛрддреА рд╣реИ, рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд▓реВрдк рдХреЗ рдмрд╛рдж рдХрддрд╛рд░ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдЪрд░ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рд╣рдорд╛рд░реЗ рдХрдорд┐рдВрдЧ рдХреЙрд▓рдмреИрдХ рдХреЛ рдПрд░реЗ рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХрддрд╛рд░, рдкрд╣рд▓реА рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рджреМрд░рд╛рди рдкрд╛рд░рд┐рдд рдХреА рдЧрдИ, рдпрд╣ рд╣реИ Promise.resolve(), рд▓реЗрдХрд┐рди рдХреЙрд▓рдмреИрдХ рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рдмрд╛рдж рдХреА рдХреЙрд▓ рдХреЗ рд╕рд╛рде, рдкрд┐рдЫрд▓реА рдХреЙрд▓ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рдЗрд╕реЗ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред array.reduceрдЬрдм рдЖрдк рдХрд┐рд╕реА рдПрдХрд▓ рдорд╛рди рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рд░рдгреА рд▓рд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рддреЛ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдмрд╣реБрдд рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╡рд╛рджрд╛, рдЬреИрд╕рд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рд╣реИред

рдЖрдЗрдП рдбрд╛рд▓рддреЗ рд╣реИрдВ рдпрд╣ рд╕рдм рдПрдХ рд╕рд╛рде ...

 getJSON('story.json').then(function(story) { addHtmlToPage(story.heading); return story.chapterUrls.reduce(function(sequence, chapterUrl) { return sequence.then(function() { // тАж   return getJSON(chapterUrl); }).then(function(chapter) { //      addHtmlToPage(chapter.html); }); }, Promise.resolve()); }).then(function() { //   ! addTextToPage(" "); }).catch(function(err) { //   ,    addTextToPage("- : " + err.message); }).then(function() { //       document.querySelector('.spinner').style.display = 'none'; }); 


рдФрд░ рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╣реБрдЖ! рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдПрдХ рдкреВрд░реНрдг рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рд╣реИред рд▓реЗрдХрд┐рди рд╣рдо рд╡рд╣рд╛рдВ рдирд╣реАрдВ рд░реБрдХреЗрдВрдЧреЗред рдлрд┐рд▓рд╣рд╛рд▓, рд╣рдорд╛рд░реЗ рдкреГрд╖реНрда рдХреЛ рд▓реЛрдб рдХрд░рдирд╛ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реИ:

рдЫрд╡рд┐

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

 Promise.all(arrayOfPromises).then(function(arrayOfResults) { //... }); 

Promise.allрд╡рд╛рджреЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рддрднреА рдкреВрд░рд╛ рд╣реЛрдЧрд╛ рдЬрдм рд╕рднреА рд╡рд╛рджреЗ рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ рдкреВрд░реЗ рд╣реЛ рдЬрд╛рдПрдВрдЧреЗред рдпрд╣ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рджрд╛ рдХреЙрд▓рдмреИрдХ thenрдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рдПрдХ рд╕рд░рдгреА рджреЗрдЧрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдкрдиреЗ рдЙрдиреНрд╣реЗрдВ рдкрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рдерд╛ред

 getJSON('story.json').then(function(story) { addHtmlToPage(story.heading); //        return Promise.all( //     //     getJSON story.chapterUrls.map(getJSON) ); }).then(function(chapters) { //        тАж chapters.forEach(function(chapter) { // тАж     addHtmlToPage(chapter.html); }); addTextToPage(" "); }).catch(function(err) { addTextToPage("- : " + err.message); }).then(function() { document.querySelector('.spinner').style.display = 'none'; }); 


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

рдЫрд╡рд┐

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

рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рдЕрдкрдиреЗ рд╕рднреА рдЕрдзреНрдпрд╛рдпреЛрдВ рдХреЗ рд▓рд┐рдП JSON рд╕реЗ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВрдЧреЗ, рдФрд░ рдлрд┐рд░ рдЙрдиреНрд╣реЗрдВ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрддрд╛рд░ рдмрдирд╛рдПрдБ:

 getJSON('story.json').then(function(story) { addHtmlToPage(story.heading); //     //     getJSON //   ,     . return story.chapterUrls.map(getJSON) .reduce(function(sequence, chapterPromise) { //        , //       return sequence.then(function() { return chapterPromise; }).then(function(chapter) { addHtmlToPage(chapter.html); }); }, Promise.resolve()); }).then(function() { addTextToPage("All done"); }).catch(function(err) { addTextToPage("Argh, broken: " + err.message); }).then(function() { document.querySelector('.spinner').style.display = 'none'; }); 


рдФрд░ рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдПрдХ рдкрддреНрдерд░ рд╕реЗ рджреЛ рдкрдХреНрд╖рд┐рдпреЛрдВ рдХреЛ рдорд╛рд░ рджрд┐рдпрд╛ ред рд╣рдо рдПрдХ рд╕рд╛рде рд╕рднреА рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдзреАрдореЗ рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рднрд╛рдЧ рдХреЛ рдереЛрдбрд╝рд╛ рдкрд╣рд▓реЗ рджреЗрдЦрдиреЗ рдХрд╛ рдЕрд╡рд╕рд░ рд╣реЛрддрд╛ рд╣реИред

рдЫрд╡рд┐

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

рдХреЙрд▓рдмреИрдХ рдФрд░ Node.js рдШрдЯрдирд╛рдУрдВ рдХреА рд╢реИрд▓реА рдореЗрдВ рдЙрдкрд░реЛрдХреНрдд рдХреЛ рджреЛрд╣рд░рд╛рдирд╛ рдЗрддрдирд╛ рд╕рд░рд▓ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХреЛрдб рдХреА рдорд╛рддреНрд░рд╛ рдХреЛ рд▓рдЧрднрдЧ рдЖрдзреЗ рд╕реЗ рджреЛрдЧреБрдирд╛ рдХрд░ рджреЗрдЧрд╛ ред рдПрдХ рд░рд╛рд╕реНрддрд╛ рдпрд╛ рджреВрд╕рд░рд╛, рдпрд╣ рд╡рд╛рджреЛрдВ рдХреА рдХрд╣рд╛рдиреА рдХреЗ рдЕрдВрдд рд╕реЗ рдмрд╣реБрдд рджреВрд░ рд╣реИред рдЖрдЗрдП рдпрд╣ рджреЗрдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╡реЗ рдЕрдиреНрдп рдирдИ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ ...

рдЫреЛрдЯрд╛ рдмреЛрдирд╕: рд╡рд╛рджреЗ рдФрд░ рдЬрдирд░реЗрдЯрд░


рдЕрдЧрд▓рд╛, рд╣рдо рдирдИ ES6 рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХреЗ рдПрдХ рдЫреЛрдЯреЗ рд╕рдореВрд╣ рдкрд░ рдПрдХ рдирдЬрд╝рд░ рдбрд╛рд▓реЗрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЖрдЬ рдЖрдкрдХреЛ рд╡рд╛рджреЛрдВ рдХреЛ рд╕рдордЭрдиреЗ рдФрд░ рдЙрдирдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЗрд╕реЗ рдЖрдЧрд╛рдореА рдмреНрд▓реЙрдХрдмрд╕реНрдЯрд░ рдХреЗ рдЯреНрд░реЗрд▓рд░ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЛрдЪреЗрдВред

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

 function *addGenerator() { var i = 0; while (true) { i += yield i; } } 


рдШреЛрд╖рд┐рдд рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рдордиреЗ рддрд╛рд░рд╛рдВрдХрди рдЪрд┐рд╣реНрди рдкрд░ рдзреНрдпрд╛рди рджреЗрдВ, рдпрд╣ рдПрдХ рдЬрдирд░реЗрдЯрд░ рд╣реЛрдиреЗ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИред рдХреАрд╡рд░реНрдб yieldрд╣рдорд╛рд░реА рд╡рд╛рдкрд╕реА / рдкреБрдирд░реНрдкреНрд░рд╛рдкреНрддрд┐ рдмрд┐рдВрджреБ рд╣реИред рд╣рдо рдКрдкрд░ рджрд┐рдП рдЧрдП рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЗрд╕ рддрд░рд╣:

 var adder = addGenerator(); adder.next().value; // 0 adder.next(5).value; // 5 adder.next(5).value; // 10 adder.next(5).value; // 15 adder.next(50).value; // 65 


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

 function spawn(generatorFunc) { function continuer(verb, arg) { var result; try { result = generator[verb](arg); } catch (err) { return Promise.reject(err); } if (result.done) { return result.value; } else { return Promise.cast(result.value).then(onFulfilled, onRejected); } } var generator = generatorFunc(); var onFulfilled = continuer.bind(continuer, "next"); var onRejected = continuer.bind(continuer, "throw"); return onFulfilled(); } 


... рдпрд╣ рдХреНрдпреВ рд╕реЗ рдПрдХ рд╕рдорд╛рди рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╕рдорд╛рди рд╣реИ , рдмрд╕ рджреЗрд╢реА рд╡рд╛рджреЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рд┐рдд рд╣реИред рдЗрд╕рдХреЗ рд╕рд╛рде, рд╣рдо рдЕрдзреНрдпрд╛рдпреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЕрдкрдиреЗ рдЕрдВрддрд┐рдо рдЙрджрд╛рд╣рд░рдг рдХреЛ рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ рдЗрд╕ рдореЗрдВ рдмрджрд▓ рд╕рдХрддреЗ рд╣реИрдВ:

 spawn(function *() { try { // 'yield' effectively does an async wait, // returning the result of the promise let story = yield getJSON('story.json'); addHtmlToPage(story.heading); // Map our array of chapter urls to // an array of chapter json promises. // This makes sure they all download parallel. let chapterPromises = story.chapterUrls.map(getJSON); for (let chapterPromise of chapterPromises) { // Wait for each chapter to be ready, then add it to the page let chapter = yield chapterPromise; addHtmlToPage(chapter.html); } addTextToPage("All done"); } catch (err) { // try/catch just works, rejected promises are thrown here addTextToPage("Argh, broken: " + err.message); } document.querySelector('.spinner').style.display = 'none'; }); 


рдпрд╣ рдХреЛрдб рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреЗ рд╕рдорд╛рди рд╣реА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдкрдврд╝рдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рд╣реЛ рдЧрдпрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рдХреНрд╖рдо рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЙрджрд╛рд╣рд░рдг рдХреНрд░реЛрдо рдХреИрдирд░реА рдореЗрдВ рдЖрдЬ рдХрд╛рдо рдХрд░реЗрдЧрд╛ about:flagsред

рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ ES6 рдХрд╛ рдПрдХ рдмрд╣реБрдд рдЬреЛрдбрд╝рддреА рд╣реИ: рд╡рд╛рджреЗ, рдЬреЗрдирд░реЗрдЯрд░ let, for-ofред рдФрд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рд╛рдорд╛рдиреНрдп рдХреЗ рд╕рд╛рде рд╕рд░рд▓ рдПрд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдХреЛрдб рдХреИрд╕реЗ рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ try/catchред

рднрд╡рд┐рд╖реНрдп рдирд┐рдХрдЯ рд╣реИред

Source: https://habr.com/ru/post/In209662/


All Articles