Async: рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 14 рдЬрдире░ 2019  ┬╖  21рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: caolan/async

рдорд╛рдирдЪрд┐рддреНрд░ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ

async.map(['file1','file2','file3'], fs.stat, function(err, results) {
    // results is now an array of stats for each file
});

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

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд╣рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдбреЙрдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдпрд╛ рдПрдордУрдИ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдирд╛)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИред

рд╕рднреА 21 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВ, рд╣рдореЗрдВ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рдбреЙрдХреНрд╕ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдореИрдВ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдИ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ (рдпрд╛ рдПрдордУрдИ рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝рдирд╛)ред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рд╕рдордп рдирд╣реАрдВ рд╣реИред

рд╢рд╛рдпрдж рдореИрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдБред

рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдХреИрд╕реЗ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ?

  • рдЕрдзрд┐рдХ async / await рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг, рдХреЙрд▓рдмреИрдХ рдХреЗ рд╕рд╛рде рдХрдо
  • рд╡рд╛рд╕реНрддрд╡рд┐рдХ рджреБрдирд┐рдпрд╛ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рд╕реЗ рдЕрдзрд┐рдХ рдареЛрд╕ рдЙрджрд╛рд╣рд░рдг, рдХрдо foo / bar
  • рдЪреАрдЬреЗрдВ рдЬреЛ Async рдХреЗ рд▓рд┐рдП "рд╕реНрд╡реАрдЯ рд╕реНрдкреЙрдЯ" рджрд┐рдЦрд╛рддреА рд╣реИрдВ -- рдРрд╕реА рдЪреАрдЬреЗрдВ рдЬреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд┐рдирд╛ рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ
  • рдЙрджрд╛рд╣рд░рдг Node/JS рдореЗрдВ рдирд╡рд╛рдЧрдВрддреБрдХреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реБрд▓рдн рд╣реИрдВ рдЬреЛ рджрд┐рдЦрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдкреИрд░рд╛рдореАрдЯрд░ рдХреИрд╕реЗ рдкреНрд░рд╡рд╛рд╣рд┐рдд рд╣реЛрддреЗ рд╣реИрдВ
  • рдЕрд▓рдЧ-рдЕрд▓рдЧ рддрд░реАрдХреЛрдВ рдХреА рдЕрдзрд┐рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рджрд░реНрд╢рд╛рдиреЗ рд╡рд╛рд▓реЗ рдЕрдзрд┐рдХ рд╡реНрдпрд╛рдкрдХ рдЙрджрд╛рд╣рд░рдг

рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП JSDoc рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ @example рдмреНрд▓реЙрдХ рд╣реИрдВред рдкрд╛рдЧрд▓ рд╣реЛ рдЬрд╛рдирд╛!

рдЙрд╕ рд╡рд┐рд╢реЗрд╖ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдзреНрдпрд╛рди рджреЗрдВ, рдЖрдк рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

await async.map(['file1','file2','file3'], fs.promises.stat);
// or without async lib
await Promise.all(['file1','file2','file3'].map(name => fs.promises.stat(name))

рдпрд╛ рдпрджрд┐ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдХреЛрдИ рд╡рд╕реНрддреБ рдЪрд╛рд╣рддреЗ рд╣реИрдВ

await async.auto({
  file1: async()=>fs.promises.stat('file1'),
  file2: async()=>fs.promises.stat('file2')
  file3: async()=>fs.promises.stat('file3')
})
// or without async lib
Object.fromEntries(
  await Promise.all(['file1','file2','file3'].map(async name => [name, await fs.promises.stat(name)]))
)

рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ async.mapLimit рдХреЗ рдПрдХ (рд╕рд░рд▓) рд╡рд╛рджрд╛-рдЖрдзрд╛рд░рд┐рдд рдЙрджрд╛рд╣рд░рдг рдХреА рддрд▓рд╛рд╢ рдореЗрдВ рд╣реВрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рдмрд┐рдирд╛ рднреАред рдЕрдм рддрдХ рдХреЛрдИ рдЧреИрд░-рдХреЙрд▓рдмреИрдХ рдЙрджрд╛рд╣рд░рдг рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИред

@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , рдпрджрд┐ рдЖрдк await рдирд╣реАрдВ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕реЗ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

рд╣рд╛рдп рд╕рд┐рд░рд┐рд▓ @caub ,
рдЖрдкрдХреЗ рдЬрд╡рд╛рдм рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред рдореИрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ 'рдкреНрд░рддреАрдХреНрд╖рд╛' рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рдмрд▓реНрдХрд┐ 'рдПрд╕рд┐рдВрдХ' рдореЙрдбреНрдпреВрд▓ рдХреЗ рд▓рд┐рдП 'рдЕрдЪреНрдЫреЗ рдЙрджрд╛рд╣рд░рдг' рдХреЗ рд▓рд┐рдП рд╣реВрдВ, рдЬрд┐рд╕реЗ рдореИрдВ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдФрд░ рдмреБрдирд┐рдпрд╛рджреА рд╡рд╛рджрд╛ рдкреНрд░рдмрдВрдзрди рдХреЗ рд╕рд╛рде рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд┐рд╕рдореЗрдВ .then .catch рд╢рд╛рдорд┐рд▓ рд╣реИред
рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рдПрд╕рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдИрдорд╛рдирджрд╛рд░реА рд╕реЗ рд╕рдВрдШрд░реНрд╖ рдХрд░рддрд╛ рд╣реВрдВ, рдЗрд╕рд▓рд┐рдП рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореИрдВ рдЪрд░рдг 1 рд╕реЗ рд╢реБрд░реВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ) ...
рдмреАрдЯреАрдбрдмреНрд▓реНрдпреВред, рдЕрдкрдирд╛ рдЙрджрд╛рд╣рд░рдг рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдПрд╕рд┐рдВрдХ рдореЙрдбреНрдпреВрд▓ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

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

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

рдареАрдХ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рд╡рд╛рджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд╕рд╛рде рдареАрдХ рд╣реВрдВ, рдФрд░ рдореИрдВ рдпрд╣ рднреА рд╕рдордЭрддрд╛ рд╣реВрдВ рдХрд┐ рдХреЙрд▓рдмреИрдХ рд╢реИрд▓реА рдореЗрдВ 'async' рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд░реЗрдВред рдЬреИрд╕рд╛ рдХрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдХреЙрд▓рдмреИрдХ рдХреА рдЖрдкреВрд░реНрддрд┐ рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдПрдХ рд╡рд╛рджрд╛ рд╡рд╛рдкрд╕ рдХрд░ рджреЗрдЧрд╛ред рдЕрдм рддрдХ, рдореИрдВ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рдареАрдХ рдирд╣реАрдВ рдХрд░ рд╕рдХрд╛, рдХрдо рд╕реЗ рдХрдо async.map(Limit) рдХреЗ рд▓рд┐рдП рдирд╣реАрдВред рдЪреВрдВрдХрд┐ рдпрд╣ рдзрд╛рдЧрд╛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдореЗрдВ 'рдмреЗрд╣рддрд░ рдЙрджрд╛рд╣рд░рдг' рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЗрд╕ рдкрд░ рдпрд╣рд╛рдВ рдзреНрдпрд╛рди рджрд┐рдпрд╛ ...
рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ, рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕реЗ рдирд╣реАрдВ рдЙрдард╛ рд╕рдХрд╛ рдФрд░ рдПрдХ рд╡рд╛рджреЗ рдХреЗ рд╕рд╛рде рдЪрд▓ рд░рд╣рд╛ рдерд╛, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛтАЛтАЛрдХрд┐ рдЙрд╕ рдкрд░ рдПрдХ рдореБрджреНрджрд╛ рднреА рдЙрдард╛рдпрд╛ред

рд╣рд╛рдп @caub , рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ, рдХреЙрд▓рдмреИрдХ, рд╡рд╛рджреЗ, рдФрд░ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рдПрдХ рд╢реЙрдЯ рд▓рд┐рдпрд╛ред

@romanbalyan рдЕрдЪреНрдЫрд╛

рдЬрд┐рди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рд╣рдо рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рд╡реЗ рд╣реИрдВ async.parallel , рдФрд░ async.auto , рдХреНрдпрд╛ рдЖрдк рдЙрдиреНрд╣реЗрдВ рднреА рдХрд╡рд░ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ?

рдиреЛрдЯ: рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЪреАрдЬреЛрдВ рдХреЛ рд╣рд▓реНрдХрд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдк async IIFE (async ()=>{ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдЙрджрд╛рд╣рд░рдгреЛрдВ рд╕реЗ рдмрдЪ рд╕рдХрддреЗ рд╣реИрдВ

@caub ,

рд╣рд╛рдВ, рдореИрдВ рдЬрд▓реНрдж рд╣реА рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рдХреЛ рднреА рдХрд╡рд░ рдХрд░рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ред рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЗрд╡рд▓ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣рд╛ рдерд╛ рдпрджрд┐ рд╕рдВрдЧреНрд░рд╣ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдЬреЛ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдП рд╣реИрдВ рд╡реЗ рдпрд╣рд╛рдВ рдЕрдкреЗрдХреНрд╖рд╛рдУрдВ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреЗ рд╣реИрдВред

@romanbalyan рдЖрдк рдХреНрдпрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЙрд╕ рдкреАрдЖрд░ рд╢рд╛рдЦрд╛ рдХреЛ рдЬреАрдердм рдкреЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ ( http://romanbalyan.github рдореЗрдВ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдХрд░

@caub , рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ред рдРрд╕рд╛ рдХрд┐рдпрд╛, рдФрд░ рдЕрдм https://romanbalyan.github.io/async/v3/ рдкрд░ рдЙрдкрд▓рдмреНрдз рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП

рд╣рд╛рдп @caub ,

рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╡рд╛рджрд╛ рдФрд░ async/рдкреНрд░рддреАрдХреНрд╖рд╛ рдирдореВрдиреЗ - async.parallel , async.series , рдФрд░ async.auto

@romanbalyan рдЕрдЪреНрдЫрд╛! https://romanbalyan.github.io/async/v3/docs.html#auto

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

рдЕрдЪреНрдЫрд╛ рд╕рд╛рдорд╛рди рдФрд░!

@ рдЧреЛрднреА

рдХреНрдпрд╛ рдореБрдЭреЗ рд╕рдВрдЧреНрд░рд╣ рд╡рд┐рдзрд┐рдпреЛрдВ рдкрд░ рднреА рд╡рд╛рджреЗ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдЙрджрд╛рд╣рд░рдг рдХреЛ рд╣рдЯрд╛ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП?

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рд╣рд╛рдБ рдЖрдк рдХрд░ рд╕рдХрддреЗ рдереЗ

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдкреНрд░рд╡рд╛рд╣ рдирд┐рдпрдВрддреНрд░рдг рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдЖрдк async рдЖрдВрддрд░рд┐рдХ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рдЙрджрд╛рд╣рд░рдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг:

const delay = (t, v) => new Promise(r => setTimeout(r, t, v));

try {
    console.time('parallel')
    const results = await async.parallel({
        one: async () => delay(200, 1),
        two: async () => delay(100, 2),
    });
    console.timeLog('parallel', results);
    // parallel: 200ms { one: 1, two: 2 }
}
catch (err) {
    console.log(err);
}

@romanbalyan рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рдХрд╛рдоред рдХрд╛рд╢ рдореБрдЭреЗ рдХреБрдЫ рджрд┐рди рдкрд╣рд▓реЗ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХрд╛ рдЖрдкрдХрд╛ рд╕рдВрд╕реНрдХрд░рдг рдорд┐рд▓ рдЬрд╛рддрд╛! рдореБрдЭреЗ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдкрд░реАрдХреНрд╖рдг рдФрд░ рддреНрд░реБрдЯрд┐ рд╕реЗ рдЪреАрдЬреЗрдВ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдирдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд╕рд╛рде рдпрд╣ рдХрдо рджрд░реНрджрдирд╛рдХ рд╣реЛрддрд╛ :-)
рдореИрдВ рдЕрднреА рднреА рдХреБрдЫ рдПрд╕рд┐рдВрдХ рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдЙрдкрдпреЛрдЧрд┐рддрд╛ рдкрд░ 100% рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрд╕рд┐рдВрдХ/рдкреНрд░рддреАрдХреНрд╖рд╛ рдФрд░ рд╡рд╛рджрд╛ рд╣реИред рд╕рд╛рде рд╣реА рд╕рд╛рде Promise.allSettled .. рдореВрд▓ рд░реВрдк рд╕реЗ рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ рд╕рднреА рд╡рд┐рдзрд┐рдпреЛрдВ рдХреЗ рдореВрд▓ рд╕рдордХрдХреНрд╖ рд╣реИрдВ рдпрд╛ рдирд╣реАрдВ . (?)

const results = await async.parallel({
    one: async () => delay(200, 1),
    two: async () => delay(100, 2),
});

рдореВрд▓ рд░реВрдк рд╕реЗ рд▓рд┐рдЦрд╛ рдЬрд╛рдПрдЧрд╛:

const results = Object.fromEntries(
  await Promise.all(
    Object.entries({
      one: async () => delay(200, 1),
      two: async () => delay(100, 2),
    })
      .map(async ([k, v]) => [k, await v()])
  )
);
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

avieru picture avieru  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

PsyTae picture PsyTae  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gone-phishing picture gone-phishing  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

cobya picture cobya  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

mjafarpour picture mjafarpour  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ