Async: ๋น„๋™๊ธฐ๋Š” ํ•จ์ˆ˜์˜ ๋Ÿฐํƒ€์ž„ ๋™์•ˆ ๋ฐฐ์—ด ์ˆ˜์ •์œผ๋กœ๋ถ€ํ„ฐ ๋ณดํ˜ธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2014๋…„ 07์›” 04์ผ  ยท  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)

์ด ์˜ˆ์ œ๋Š” 3๊ฐœ์˜ ์›๋ž˜ ๋ฐฐ์—ด ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ณ  i ์ธ์‡„ํ•˜์ง€๋งŒ async.each ์—์„œ ๋‹ค์Œ์„ ์ˆ˜ํ–‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

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

๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋ณผ ๋•Œ ๋ณ€๊ฒฝ๋  ์ˆ˜ ์žˆ๋Š” arr.length ๋Œ€ํ•œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์›๋ž˜ ๋ฐฐ์—ด ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜๊ณ  ์ด์— ๋Œ€ํ•œ ๋น„๊ต๋ฅผ ์ˆ˜ํ–‰ํ•˜์—ฌ ์™„๋ฃŒ๋œ ์ฝœ๋ฐฑ์ด ํ˜ธ์ถœ๋˜๋„๋ก ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์ง€ ์•Š์„๊นŒ์š”? ?

๊นก๊นก์ด:
http://jsfiddle.net/4ysKX/1/

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

async๋Š” ๊ฒฐ๊ตญ ์–ด๋ ˆ์ด ์ˆ˜์ •์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ์ฒ˜์Œ๋ณด๋‹ค ๋” ๋งŽ์€ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์‹ค ์ดํ›„์— ์›๋ž˜ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  6 ๋Œ“๊ธ€

๋‹น์‹ ์ด ์˜ณ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๊ทธ๊ฒƒ์„ ์ˆ˜์ •ํ•˜์ง€ ๋งˆ์‹ญ์‹œ์˜ค. ๋‚˜์ค‘์— ๋ณ€๊ฒฝํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋น„๋™๊ธฐ ํ•จ์ˆ˜์— ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ๋ฐฐ์—ด์„ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค.

@aearly ์˜ˆ, ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด์ง€๋งŒ ๊ทผ๋ณธ์ ์ธ ๋ฌธ์ œ๋Š” ๋งค์šฐ ์‰ฌ์šด ์‹ค์ˆ˜์ด๊ณ  ๋””๋ฒ„๊ทธํ•˜๊ธฐ๊ฐ€ ๋งค์šฐ ์–ด๋ ค์šด ๋ฌธ์ œ์ด๋ฏ€๋กœ IMHO๋Š” ํ•ต์‹ฌ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์ˆ˜์ •๋˜์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๋‘ ๊ฐœ์˜ ๋‹ค๋ฅธ ํ”„๋กœ์ ํŠธ์—์„œ ๋‚˜๋ฅผ ๋‘ ๋ฒˆ ๋ฌผ์—ˆ์Šต๋‹ˆ๋‹ค.

์ž…๋ ฅ์„ ๋ณต์ œํ•˜์ง€ ์•Š๊ณ  _any_ ๋ฐฐ์—ด ์ˆ˜์ •์— ๋Œ€ํ•ด ๋ณดํ˜ธํ•˜๋Š” ๊ฒƒ์€ ์–ด๋ ค์šธ ๊ฒƒ์ž…๋‹ˆ๋‹ค(์˜ˆ: iterator ํ•จ์ˆ˜์˜ ๋™๊ธฐ ์ˆ˜์ •). ๊ทธ๋Ÿฌ๋‚˜ ๋ฐ˜๋ณต๊ณผ ๊ด€๋ จ์ด ์—†๋Š” _asynchronous_ ์ˆ˜์ •์— ๋Œ€ํ•œ ๋ณดํ˜ธ๋Š” ๋ณต์ œ ์—†์ด๋„ ๊ฐ„๋‹จํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์‹ค์ œ๋กœ arr.length ๊ฐ€์ •ํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

(์ €๋Š” @bradens ์™€ ํ•จ๊ป˜

ํ…Œ์ŠคํŠธ๊ฐ€ ํฌํ•จ๋œ PR์„ ํ™˜์˜ํ•˜์ง€๋งŒ ์ด๋ฅผ ๋ณ‘ํ•ฉํ•˜๋Š” ๊ฒƒ์€ ๊ถ๊ทน์ ์œผ๋กœ @caolan์— ๋‹ฌ๋ ค ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ์ž‘์—…์˜ ๋‹จ์ ์€ ์–ด๋ ˆ์ด ๋ณต์‚ฌ์˜ ์ถ”๊ฐ€ ์˜ค๋ฒ„ํ—ค๋“œ์ž…๋‹ˆ๋‹ค. ๋ฐฐ์—ด์ด ํฌ๊ฑฐ๋‚˜ async.each ๋“ฑ์„ ์—ฌ๋Ÿฌ ๋ฒˆ ํ˜ธ์ถœํ•˜๋Š” ๊ฒฝ์šฐ ์†๋„๊ฐ€ ๋Š๋ ค์ง€๊ณ  ๋” ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์–ด๋ ˆ์ด ๋ณต์‚ฌ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์€ ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ๋  ๊ฒƒ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์˜ ์ดˆ๊ธฐ ๋ฐ˜๋ณต์ด ๋™๊ธฐ์‹์ด๋ฏ€๋กœ ์›๋ž˜ ๋ฐฐ์—ด ๊ธธ์ด๋ฅผ ์ €์žฅํ•˜์—ฌ ๋‚˜์ค‘์— ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ œ์•ˆํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋ ‡๊ฒŒ ํ•˜๋ฉด ๊ทธ ์‚ฌ์ด์— ๋ฐฐ์—ด์ด ๋ณ€๊ฒฝ๋˜๋”๋ผ๋„ ์ฝœ๋ฐฑ ํ˜ธ์ถœ ์ˆ˜๊ฐ€ ๋ฐ˜๋ณต์ž ํ˜ธ์ถœ ์ˆ˜์™€ ์ผ์น˜ํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ async.each ๋Œ€ํ•ด ์‰ฝ๊ณ  ์˜ค๋ฒ„ํ—ค๋“œ๊ฐ€ ์—†์–ด์•ผ ํ•˜์ง€๋งŒ ๋‹ค๋ฅธ ๊ธฐ๋Šฅ์€ ์•„์ง ์‚ดํŽด๋ณด์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด๋Ÿฌํ•œ ๊ฒฝ์šฐ ๋ชจ๋“  ๋ณ‘๋ ฌ ๊ธฐ๋Šฅ์ด ์ผ๊ด€๋œ ๋™์ž‘์„ ํ•˜๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ #557์˜ ๋ณต์ œํ’ˆ์ž…๋‹ˆ๋‹ค.

async๋Š” ๊ฒฐ๊ตญ ์–ด๋ ˆ์ด ์ˆ˜์ •์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์•˜์Šต๋‹ˆ๊นŒ? ์ฒ˜์Œ๋ณด๋‹ค ๋” ๋งŽ์€ ์š”์†Œ๋ฅผ ๋ฐ˜๋ณตํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์‹ค ์ดํ›„์— ์›๋ž˜ ๋ฐฐ์—ด์„ ์ˆ˜์ •ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์€ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰