рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓реВрдк рдореЗрдВ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВ

рдЖрджреЗрд╢ рдореЗрдВ рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЫреЛрд░реЛрдВ рдХреЛ рдХреИрд╕реЗ рдЪрд▓рд╛рдПрдВ?


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


рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЫреЛрд░реЛрдВ


рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓реВрдк рд▓рд┐рдЦрд╛ рдерд╛ (рд╢рд╛рдпрдж рдЖрдк рднреА):


for (var i=0; i < array.length; i++) { var item = array[i]; //  -  item } 

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


 array.forEach((item) => { //  -  item }); 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛ рд░рд╣рд╛ рд╣реИред рдирдИ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдФрд░ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рдореЗрд░реА рдкрд╕рдВрджреАрджрд╛ рд╕рдВрд╡рд░реНрджреНрдзрди рдореЗрдВ рд╕реЗ рдПрдХ async / рдкреНрд░рддреАрдХреНрд╖рд╛ рд╣реИ ред


рдЕрдм рдореИрдВ рдЗрд╕ рд╡рд╛рдХреНрдпрд╡рд┐рдиреНрдпрд╛рд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдХреНрд╕рд░ рдХрд░рддрд╛ рд╣реВрдВред рдФрд░ рдХрднреА-рдХрднреА рдРрд╕реЗ рд╣рд╛рд▓рд╛рдд рд╣реЛрддреЗ рд╣реИрдВ рдЬрдм рдореБрдЭреЗ рд╕рд░рдгреА рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд╛рде рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдХреБрдЫ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред


рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдЫреЛрд░реЛрдВ


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


 async function processArray(array) { array.forEach(item => { //       //     ! await func(item); }) } 

рдпрд╣ рдХреЛрдб рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧрд╛ред рдХреНрдпреЛрдВ? рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдПрдХ рддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЕрдВрджрд░ await рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЬреИрд╕рд╛ рдХрд┐ рдЖрдк рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, processArray рдПрдХ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдлрд╝рдВрдХреНрд╢рди рд╣реИред рд▓реЗрдХрд┐рди forEach рд▓рд┐рдП рд╣рдо рдЬреЛ рдлрдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡рд╣ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рд╣реИ ред


рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?


1. рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рди рдХрд░реЗрдВ


рд╣рдо рдПрдХ рдЕрдирд╛рдо рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:


 async function processArray(array) { array.forEach(async (item) => { await func(item); }) console.log('Done!'); } 

рд▓реЗрдХрд┐рди forEach рдХрд╛рд░реНрдп рдХреЗ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред forEach рдПрдХ рд╕рд┐рдВрдХреНрд░реЛрдирд╕ рдСрдкрд░реЗрд╢рди рд╣реИред рд╡рд╣ рдмрд╕ рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓реЙрдиреНрдЪ рдХрд░реЗрдЧреА рдФрд░ рдЖрдЧреЗ рдмрдврд╝реЗрдЧреАред рдЪрд▓реЛ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд░реАрдХреНрд╖рдг рдкрд░ рдЬрд╛рдБрдЪ рдХрд░реЗрдВ:


 function delay() { return new Promise(resolve => setTimeout(resolve, 300)); } async function delayedLog(item) { //    await  Promise //    delay await delay(); console.log(item); } async function processArray(array) { array.forEach(async (item) => { await delayedLog(item); }) console.log('Done!'); } processArray([1, 2, 3]); 

рдХрдВрд╕реЛрд▓ рдореЗрдВ рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ:


 Done! 1 2 3 

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


2. рдЪрдХреНрд░ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛


рд▓реВрдк рдмреЙрдбреА рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЗ рд▓рд┐рдП рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ "рд▓реВрдк" рдХреЗ рд▓рд┐рдП рдЕрдЪреНрдЫреЗ рдкреБрд░рд╛рдиреЗ "рдкрд░ рд▓реМрдЯрдиреЗ" рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЗрд╕ рдмрд╛рд░ рд╣рдо рдЗрд╕рдХреЗ рдирдП рд╕рдВрд╕реНрдХрд░рдг рдХрд╛ рдЙрдкрдпреЛрдЧ for..of рдирд┐рд░реНрдорд╛рдг (рдзрдиреНрдпрд╡рд╛рдж рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХреЗ рд▓рд┐рдП ) рдХреЗ рд╕рд╛рде рдХрд░реЗрдВрдЧреЗ:


 async function processArray(array) { for (const item of array) { await delayedLog(item); } console.log('Done!'); } 

рдпрд╣ рд╣рдореЗрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛:


 1 2 3 Done! 

рд╕рд░рдгреА рдХреЗ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдХреЛ рдХреНрд░рдорд┐рдХ рд░реВрдк рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдо рд▓реВрдк рдХреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рд╣реИрдВ!


3. рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд▓реВрдк рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдирд╛


рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рд╕рдВрдЪрд╛рд▓рди рд╢реБрд░реВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХреЛрдб рдХреЛ рдереЛрдбрд╝рд╛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛:


 async function processArray(array) { //  "map"    const promises = array.map(delayedLog); //       await Promise.all(promises); console.log('Done!'); } 

рдпрд╣ рдХреЛрдб рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрдИ delayLog рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдЪрд▓рд╛ рд╕рдХрддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВред рдмрд╣реБрдд рд╕реЗ рдХрд╛рд░реНрдп CPU рдФрд░ рдореЗрдореЛрд░реА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдХрдард┐рди рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред


рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдХреГрдкрдпрд╛ "рд╕рдорд╛рдирд╛рдВрддрд░ рдХрд╛рд░реНрдпреЛрдВ" рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдорд╛рдирддрд╛ рдФрд░ рдзрд╛рдЧреЗ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рд╕реЗ рднреНрд░рдорд┐рдд рди рдХрд░реЗрдВред рдпрд╣ рдХреЛрдб рд╕рдорд╛рдирд╛рдВрддрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреА рдЧрд╛рд░рдВрдЯреА рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИред рд╕рдм рдХреБрдЫ рд▓реВрдк рдХреЗ рд╢рд░реАрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рдпрд╣ delayedLog )ред рдиреЗрдЯрд╡рд░реНрдХ рдЕрдиреБрд░реЛрдз, рд╡реЗрдмрд╡рд░реНрдХ, рдФрд░ рдХреБрдЫ рдЕрдиреНрдп рдХрд╛рд░реНрдп рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдХрд┐рдП рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред

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


All Articles