Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΎΡ ΠΏΡΠΈΠΌΠ΅Ρ Π΄Π»Ρ ΠΊΠ°ΡΡΡ
async.map(['file1','file2','file3'], fs.stat, function(err, results) {
// results is now an array of stats for each file
});
ΠΠΎ ΡΡΡΠΈ, ΡΡΠΎ Π½ΠΈΡΠ΅Π³ΠΎ ΠΌΠ½Π΅ Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈΡ, ΠΊΡΠΎΠΌΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ°. Π Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π΅ ΡΠ»ΡΡΠ°Π΅Π² Π»ΡΠ΄ΠΈ Π½Π΅ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡΡ ΡΠ΄Π°Π²Π°ΡΡ fs.stat
. ΠΡΠΈΠΌΠ΅ΡΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π²ΠΊΠ»ΡΡΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΡΠ΅Ρ
Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΡΡ
Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ². ΠΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ Π΄Π»Ρ Π²ΡΠ΅Ρ
ΡΡΠ½ΠΊΡΠΈΠΉ ΠΈ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ. ΠΠ½ΠΈ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠΏΡΠΎΡΠ΅Π½Ρ
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ. Π― ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²), ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ async / await. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ ΠΌΠ΅Π½Ρ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅Ρ.
ΠΠΎΠΆΠ΅Ρ, Ρ ΡΠΌΠΎΠ³Ρ ΠΏΠΎΠΌΠΎΡΡ.
ΠΠ°ΠΊ Ρ ΠΌΠΎΠ³Ρ ΠΏΠΎΠΌΠΎΡΡ Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ?
async
/ await
, ΠΌΠ΅Π½ΡΡΠ΅ Ρ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΌΠΈ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈfoo
/ bar
ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ
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 Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ Promise, Π΄Π°ΠΆΠ΅ Π±Π΅Π· async / await. ΠΠΎΠΊΠ° Π½Π΅ Π½Π°ΡΠ΅Π» Π½ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°.
@flatcoding https://github.com/caub/misc/blob/master/utils/promise-concurrent.js , Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ Π½ΡΠΆΠ΅Π½ await
, Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π΅Π³ΠΎ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎΠΉ ΡΡΠ½ΠΊΡΠΈΠ΅ΠΉ
ΠΡΠΈΠ²Π΅Ρ Π‘ΠΈΡΠΈΠ» @caub ,
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π°Ρ ΠΎΡΠ²Π΅Ρ. Π― Π½Π΅ ΠΎΡΠΎΠ±ΠΎ ΠΏΡΠΎΡΠΈΠ² Β«awaitΒ», ΡΠΊΠΎΡΠ΅Π΅ ΡΠ°Π΄ΠΈ Β«Ρ
ΠΎΡΠΎΡΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²Β» Π΄Π»Ρ ΠΌΠΎΠ΄ΡΠ»Ρ Β«asyncΒ», Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ Ρ
ΠΎΡΠ΅Π» Π±Ρ Π½Π°ΡΠ°ΡΡ ΠΈ ΡΠ²ΠΈΠ΄Π΅ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ Ρ Π±Π°Π·ΠΎΠ²ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΎΠΉ Promise, Π²ΠΊΠ»ΡΡΠ°Ρ .then .catch.
Π― ΡΠ΅ΡΡΠ½ΠΎ Π±ΠΎΡΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ async Ρ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΡΠΌΠΈ Π² ΡΠ΅Π»ΠΎΠΌ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΏΠ΅ΡΠ΅Π΄ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ async / await Ρ ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Π» Π±Ρ Π½Π°ΡΠ°ΡΡ Ρ ΡΠ°Π³Π° 1) ...
ΠΡΡΠ°ΡΠΈ, ΡΠΏΠ°ΡΠΈΠ±ΠΎ, ΡΡΠΎ ΠΏΠΎΠ΄Π΅Π»ΠΈΠ»ΠΈΡΡ ΡΠ²ΠΎΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ, Ρ Π½Π΅ ΡΠΎΠ²ΡΠ΅ΠΌ ΡΠ²Π΅ΡΠ΅Π½, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ async.
Π― ΠΏΠΎΠ΄ΡΠΌΠ°Π», ΡΡΠΎ ΠΏΠΎΠ΄ "ΠΏΡΠΎΡΡΡΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠΌ Π½Π° ΠΎΡΠ½ΠΎΠ²Π΅ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉ" Π²Ρ ΠΈΠΌΠ΅Π»ΠΈ Π² Π²ΠΈΠ΄Ρ ΠΏΡΠΈΠΌΠ΅Ρ Π±Π΅Π· ΠΊΠ°ΠΊΠΎΠΉ-Π»ΠΈΠ±ΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ.
Π΅ΡΠ»ΠΈ Π²Π°ΠΌ Π½ΡΠΆΠ΅Π½ ΠΏΡΠΈΠΌΠ΅Ρ Ρ ΡΡΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ, Ρ ΡΠ²Π΅ΡΠ΅Π½, ΡΡΠΎ Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ
ΠΠ΅ΡΠ½ΠΎ, Π² ΡΠ΅Π»ΠΎΠΌ Ρ Π½ΠΎΡΠΌΠ°Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡ Promises, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ, ΠΊΠ°ΠΊ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΌΠΎΠ΄ΡΠ»ΠΈ async Π² ΡΡΠΈΠ»Π΅ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π°. ΠΠ°ΠΊ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Π±Π΅Π· ΠΎΠ±ΡΠ°ΡΠ½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΠΎΠ½ Π²Π΅ΡΠ½Π΅Ρ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠ΅. ΠΠΎΠΊΠ° ΡΡΠΎ Ρ Π½Π΅ ΠΌΠΎΠ³ Ρ
ΠΎΡΠΎΡΠΈΡ
ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ², ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅, Π΄Π»Ρ async.map (Limit). ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΡΠ° Π²Π΅ΡΠΊΠ° ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π° Β«Π»ΡΡΡΠΈΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΒ» Π² Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ, Ρ Π²ΠΌΠ΅ΡΠ°Π»ΡΡ Π² ΡΡΠΎ Π·Π΄Π΅ΡΡ ...
Π, ΠΊΠ°ΠΊ ΡΠΆΠ΅ Π±ΡΠ»ΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ, Ρ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅ ΠΌΠΎΠ³ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΅Π³ΠΎ ΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ Promise, Π΄Π°ΠΆΠ΅ ΠΏΠΎΠ΄Π½ΡΠ» Π²ΠΎΠΏΡΠΎΡ ΠΏΠΎ ΡΡΠΎΠΌΡ ΠΏΠΎΠ²ΠΎΠ΄Ρ.
ΠΡΠΈΠ²Π΅Ρ, @caub , ΡΠ΄Π΅Π»Π°Π»
@romanbalayan ΠΏΡΠΈΡΡΠ½ΠΎ
ΡΠ°ΡΠ΅ Π²ΡΠ΅Π³ΠΎ ΠΌΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ: async.parallel
ΠΈ async.auto
ΠΠ»Π°Π½ΠΈΡΡΠ΅ΡΠ΅ Π»ΠΈ Π²Ρ ΠΎΡ
Π²Π°ΡΠΈΡΡ ΠΈ ΠΈΡ
?
ΠΏΡΠΈΠΌΠ΅ΡΠ°Π½ΠΈΠ΅: Ρ Π΄ΡΠΌΠ°Ρ, Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ async IIFE (async ()=>{
Π² ΠΏΡΠΈΠΌΠ΅ΡΠ°Ρ
async / await, ΡΡΠΎΠ±Ρ ΡΠΏΡΠΎΡΡΠΈΡΡ Π·Π°Π΄Π°ΡΡ
@caub , ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½Π½ΡΠΉ ΠΏΡΠ»ΡΠ΅ΠΊΠ²Π΅ΡΡ Π΄Π»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ IIFE. (ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π» Π΅Π³ΠΎ Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ, Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π»ΠΈ ΠΎΠ±ΡΠ°Π·ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ)
ΠΠ°, Ρ ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅Π» Π±Ρ Π²ΡΠΊΠΎΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎΠ± ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠΌ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Ρ ΠΏΡΠΎΡΡΠΎ ΠΆΠ΄Π°Π» ΠΎΡΠ·ΡΠ²ΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π»ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Ρ Π²Π½Π΅Ρ Π΄Π»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ² ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ, ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡΠΌ Π·Π΄Π΅ΡΡ.
@romanbalayan, ΡΡΠΎ Π²Ρ ΠΌΠΎΠ³Π»ΠΈ Π±Ρ ΡΠ΄Π΅Π»Π°ΡΡ, ΡΡΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ ΡΡΡ PR-Π²Π΅ΡΠΊΡ ΠΊΠ°ΠΊ ΡΡΡΠ°Π½ΠΈΡΡ github (ΠΏΠ΅ΡΠ΅ΠΉΠ΄ΠΈΡΠ΅ Π² ΡΠ²ΠΎΡ Π²ΠΈΠ»ΠΊΡ async, Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ> Github pages> Source: (Π²ΡΠ±Π΅ΡΠΈΡΠ΅ ΡΠ²ΠΎΡ PR-Π²Π΅ΡΠΊΡ)), ΡΡΠΎΠ±Ρ ΠΌΡ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΡΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π΅Π΅ Π½Π° http: //romanbalayan.github .io / Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΉ / v3 /
@caub , ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΠΈΠ΄Π΅Ρ. Π‘Π΄Π΅Π»Π°Π» ΡΡΠΎ, ΠΈ ΡΠ΅ΠΏΠ΅ΡΡ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ Π΄ΠΎΡΡΡΠΏΠ΅Π½ Π½Π° https://romanbalayan.github.io/async/v3/
ΠΡΠΈΠ²Π΅Ρ @caub ,
ΠΠΎΠ±Π°Π²Π»Π΅Π½Ρ ΠΎΠ±ΡΠ°Π·ΡΡ Promise ΠΈ async / await Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ - async.parallel
, async.series
ΠΈ async.auto
@romanbalayan Π·Π΄ΠΎΡΠΎΠ²ΠΎ! https://romanbalayan.github.io/async/v3/docs.html#auto
Π― ΡΡΠ²ΡΡΠ²ΡΡ, ΡΡΠΎ ΠΏΡΠΈΠΌΠ΅ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ·ΠΎΠ²Π° ΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉ Π²ΡΠ΅Π³Π΄Π° ΠΎΡΠ΅Π½Ρ ΠΏΠΎΡ ΠΎΠΆΠΈ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, ΡΡΠΎΠΈΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ· Π½ΠΈΡ , ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΎΠ±Π΅ΡΠ°Π½ΠΈΠΉ ΠΌΡ Π±Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ async / await, ΠΈ ΡΡΠΎ ΠΎΠ±Π»Π΅Π³ΡΠΈΠ»ΠΎ Π±Ρ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»
ΠΡΠ΅ Ρ ΠΎΡΠΎΡΠΈΠ΅ Π²Π΅ΡΠΈ!
@caub
Π‘Π»Π΅Π΄ΡΠ΅Ρ Π»ΠΈ ΠΌΠ½Π΅ ΡΠ°ΠΊΠΆΠ΅ ΡΠ΄Π°Π»ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Promises Π² ΠΌΠ΅ΡΠΎΠ΄Π°Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΠΉ?
Π― Π΄ΡΠΌΠ°Ρ Π΄Π° ΡΡ ΠΌΠΎΠ³ Π±Ρ
Π’Π°ΠΊΠΆΠ΅ Π΄Π»Ρ ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠΌ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ ΠΏΡΠΈΠΌΠ΅ΡΡ Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΠΌΠΈ Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠΌΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ:
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);
}
@romanbalayan ΠΎΡΠ»ΠΈΡΠ½Π°Ρ ΡΠ°Π±ΠΎΡΠ°. Π₯ΠΎΡΠ΅Π» Π±Ρ Ρ Π½Π°ΠΉΡΠΈ Π²Π°ΡΡ Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π½Π΅ΠΉ Π½Π°Π·Π°Π΄! Π ΠΊΠΎΠ½ΡΠ΅ ΠΊΠΎΠ½ΡΠΎΠ², Ρ Π²ΡΡΡΠ½ΠΈΠ», ΠΊΠ°ΠΊ Π²ΡΠ΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΌΠ΅ΡΠΎΠ΄ΠΎΠΌ ΠΏΡΠΎΠ± ΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ, Π½ΠΎ Ρ Π½ΠΎΠ²ΡΠΌΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ°ΠΌΠΈ ΡΡΠΎ Π±ΡΠ»ΠΎ Π±Ρ ΠΌΠ΅Π½Π΅Π΅ Π±ΠΎΠ»Π΅Π·Π½Π΅Π½Π½ΠΎ :-)
Π― Π²ΡΠ΅ Π΅ΡΠ΅ Π½Π΅ ΡΠ²Π΅ΡΠ΅Π½ Π½Π° 100% Π² ΠΏΠΎΠ»Π΅Π·Π½ΠΎΡΡΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ
Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½ΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ², ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ Ρ Π½Π°Ρ Π΅ΡΡΡ async / await ΠΈ Promise.all, Π° ΡΠ°ΠΊΠΆΠ΅ 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()])
)
);
Π‘Π°ΠΌΡΠΉ ΠΏΠΎΠ»Π΅Π·Π½ΡΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΠΉ
Π― ΡΠΎΠ³Π»Π°ΡΠ΅Π½, Π½Π°ΠΌ Π½ΡΠΆΠ½Ρ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π»ΡΡΡΠΈΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΡ. Π― ΡΠ°ΠΊΠΆΠ΅ Ρ ΠΎΡΠ΅Π» Π±Ρ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΎΠ²), ΡΡΠΎΠ±Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ async / await. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ Ρ ΠΌΠ΅Π½Ρ ΡΠ΅ΠΉΡΠ°Ρ Π½Π΅Ρ.