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 / await. Однако это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρƒ мСня сСйчас Π½Π΅Ρ‚.

ВсС 21 ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

Π― согласСн, Π½Π°ΠΌ Π½ΡƒΠΆΠ½Ρ‹ Π³ΠΎΡ€Π°Π·Π΄ΠΎ Π»ΡƒΡ‡ΡˆΠΈΠ΅ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹. Π― Ρ‚Π°ΠΊΠΆΠ΅ Ρ…ΠΎΡ‚Π΅Π» Π±Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ (ΠΈΠ»ΠΈ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ²), Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ async / await. Однако это Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Ρƒ мСня сСйчас Π½Π΅Ρ‚.

ΠœΠΎΠΆΠ΅Ρ‚, я смогу ΠΏΠΎΠΌΠΎΡ‡ΡŒ.

Как я ΠΌΠΎΠ³Ρƒ ΠΏΠΎΠΌΠΎΡ‡ΡŒ с ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°ΠΌΠΈ?

  • ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ с большим количСством 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 Π½Π° основС 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()])
  )
);
Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ