Async: Async Π½Π΅ Π·Π°Ρ‰ΠΈΡ‰Π°Π΅Ρ‚ ΠΎΡ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ массива Π²ΠΎ врСмя выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Π‘ΠΎΠ·Π΄Π°Π½Π½Ρ‹ΠΉ Π½Π° 4 июл. 2014  Β·  6ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ  Β·  Π˜ΡΡ‚ΠΎΡ‡Π½ΠΈΠΊ: caolan/async

Когда Ρƒ вас Π΅ΡΡ‚ΡŒ асинхронный Π²Ρ‹Π·ΠΎΠ², Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€. async.each , ΠΈ Π²ΠΎ врСмя этого выполнСния ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹ΠΉ массив ΠΈΠΌΠ΅Π΅Ρ‚ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π΄Π° ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ‚ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ Π·Π°ΠΊΠΎΠ½Ρ‡ΠΈΡ‚ΡŒΡΡ ΠΈΠ»ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅Ρ‚ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π΄Π²Π°ΠΆΠ΄Ρ‹.

ΠŸΡ€ΠΈΠΌΠ΅Ρ€:

async = require "async" 
arr = [1, 2, 3]  
async.each arr, ((i, cb) -> console.log "i"; setImmediate(cb)), (err) -> console.log "done" 
arr.push(4)

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ выполняСтся Ρ†ΠΈΠΊΠ» ΠΏΠΎ Ρ‚Ρ€Π΅ΠΌ исходным элСмСнтам массива ΠΈ выводится i Π½ΠΎ ΠΏΡ€ΠΈ этом ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ вызываСтся, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π² async.each ΠΎΠ½ выполняСт:

if (completed >= arr.length) {
  callback(null);
}

ΠŸΡ€ΠΈ просмотрС асинхронного ΠΊΠΎΠ΄Π° ΠΎΠ½ выполняСт сравнСниС с arr.length ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒΡΡ ... Π½Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΡ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΠΈΡΡ…ΠΎΠ΄Π½ΡƒΡŽ Π΄Π»ΠΈΠ½Ρƒ массива ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ сравнСниС с Π½Π΅ΠΉ, гарантируя, Ρ‡Ρ‚ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½Ρ‹ΠΉ ΠΎΠ±Ρ€Π°Ρ‚Π½Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π·Π²Π°Π½ ?

Π‘ΠΊΡ€ΠΈΠΏΠΊΠ°:
http://jsfiddle.net/4ysKX/1/

Π‘Π°ΠΌΡ‹ΠΉ ΠΏΠΎΠ»Π΅Π·Π½Ρ‹ΠΉ ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΉ

НСуТСли async Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ» ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ массива постфактум? Π£ мСня Π΅ΡΡ‚ΡŒ случай использования, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный массив послС Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ для большСго количСства элСмСнтов, Ρ‡Π΅ΠΌ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ.

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

Π’Ρ‹ ΠΏΡ€Π°Π²Ρ‹ - Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π΅ мСняйтС Π΅Π³ΠΎ. ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ свой массив, ΠΏΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΏΠ΅Ρ€Π΅Π΄Π°Π²Π°Ρ‚ΡŒ Π΅Π³ΠΎ асинхронной Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π΅Π³ΠΎ ΠΏΠΎΠ·ΠΆΠ΅.

@aearly Π”Π°, это

Π‘Ρ‹Π»ΠΎ Π±Ρ‹ слоТно Π·Π°Ρ‰ΠΈΡ‚ΠΈΡ‚ΡŒ ΠΎΡ‚ _Π»ΡŽΠ±Ρ‹Ρ…_ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ массива Π±Π΅Π· клонирования Π²Π²ΠΎΠ΄Π°, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΎΡ‚ синхронной ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π½ΠΎ Π·Π°Ρ‰ΠΈΡ‚Π° ΠΎΡ‚ _асинхронных_ ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΠΉ, Π½Π΅ связанных с ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ, Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ простой Π΄Π°ΠΆΠ΅ Π±Π΅Π· клонирования - Π½Π° самом Π΄Π΅Π»Π΅ просто Π½Π΅ прСдполагая arr.length останСтся постоянным послС запуска асинхронных Π·Π°Π΄Π°Π½ΠΈΠΉ (сохранСниС Π΄Π»ΠΈΠ½Ρ‹ Π² ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΠ΅Ρ€Π΅Π΄ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠ΅ΠΉ).

(Π― Ρ€Π°Π±ΠΎΡ‚Π°ΡŽ с @bradens - ΠΎΠ΄ΠΈΠ½ ΠΈΠ· нас ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ PR с тСстами, Ссли это привСтствуСтся).

ΠŸΡ€ΠΈΠ²Π΅Ρ‚ΡΡ‚Π²ΡƒΠ΅Ρ‚ΡΡ PR с тСстами, Π½ΠΎ Π² ΠΊΠΎΠ½Π΅Ρ‡Π½ΠΎΠΌ ΠΈΡ‚ΠΎΠ³Π΅ @caolan Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΡ… ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΠΈΡ‚ΡŒ.

ΠžΠ±Ρ€Π°Ρ‚Π½ΠΎΠΉ стороной этого являСтся Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Π΅ расходы Π½Π° ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива. Если Ρƒ вас большой массив ΠΈΠ»ΠΈ Π²Ρ‹ Π²Ρ‹Π·Ρ‹Π²Π°Π΅Ρ‚Π΅ async.each ΠΈ Π΄Ρ€. Много Ρ€Π°Π·, ΠΎΠ½ Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΈ ΠΏΠΎΡ‚Ρ€Π΅Π±Π»ΡΡ‚ΡŒ большС памяти.

Π― согласСн с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ массива Π±Ρ‹Π»ΠΎ Π±Ρ‹ слишком Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹ΠΌΠΈ расходами. Π― ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΡŽ, Ρ‡Ρ‚ΠΎ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Π½Π°Ρ‡Π°Π»ΡŒΠ½Π°Ρ итСрация массива являСтся синхронной, исходная Π΄Π»ΠΈΠ½Π° массива ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ сохранСна для ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, количСство Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ Π²Ρ‹Π·ΠΎΠ²Π° Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ количСству Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, Π΄Π°ΠΆΠ΅ Ссли Π·Π° это врСмя массив Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½. Π­Ρ‚ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Π»Π΅Π³ΠΊΠΎ ΠΈ Π±Π΅Π· Π½Π°ΠΊΠ»Π°Π΄Π½Ρ‹Ρ… расходов для async.each , Π½ΠΎ я Π΅Ρ‰Π΅ Π½Π΅ рассматривал Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π‘Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ, Ссли Π±Ρ‹ всС ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² этих случаях Π²Π΅Π»ΠΈ сСбя ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ.

Π­Ρ‚ΠΎ Π΄ΡƒΠ±Π»ΠΈΠΊΠ°Ρ‚ β„– 557.

НСуТСли async Π·Π°ΠΏΡ€Π΅Ρ‚ΠΈΠ» ΠΌΠΎΠ΄ΠΈΡ„ΠΈΠΊΠ°Ρ†ΠΈΡŽ массива постфактум? Π£ мСня Π΅ΡΡ‚ΡŒ случай использования, ΠΊΠΎΠ³Π΄Π° Π±Ρ‹Π»ΠΎ Π±Ρ‹ Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ исходный массив послС Ρ„Π°ΠΊΡ‚Π°, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ для большСго количСства элСмСнтов, Ρ‡Π΅ΠΌ ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ.

Π‘Ρ‹Π»Π° Π»ΠΈ эта страница ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΉ?
0 / 5 - 0 Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ΠΈ

Π‘ΠΌΠ΅ΠΆΠ½Ρ‹Π΅ вопросы

mjafarpour picture mjafarpour  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

gone-phishing picture gone-phishing  Β·  5ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

brainthinks picture brainthinks  Β·  3ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

JustinBeaudry picture JustinBeaudry  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ

dep picture dep  Β·  4ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ