Async: ์ค‘์ฒฉ ๋œ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์ด์žˆ๋Š” eachSeries๋Š” ์ตœ๋Œ€ ํ˜ธ์ถœ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 08์›” 10์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: caolan/async

์–ด๋–ค ๋ฒ„์ „์˜ ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?

2.0.1

(๋…ธ๋“œ ๋ฒ„์ „ / ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „)์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํ™˜๊ฒฝ

๋…ธ๋“œ 6.2.1
NPM 3.9.3

๋ญ ํ–ˆ์–ด?

let counter = 2000;

async.eachSeries(
  new Array(counter),
  (item, cb) => {
    async.parallel([
      (pCb) => {
        console.log(counter--);
        pCb();
      },
    ], cb);
  },
  () => console.log('done')
);

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ ํ–ˆ์Šต๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ฐ ๋ฐ˜๋ณต์ด ๋ฐœ์ƒํ•  ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒํ–ˆ๋Š”๋ฐ, ๊ทธ ๊ฒฐ๊ณผ ๋งˆ์ง€๋ง‰ ๋‘ console.log๊ฐ€ '1'๊ณผ 'done'์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์‹ค์ œ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

1000 ํšŒ ๋ฏธ๋งŒ์˜ ๋ฐ˜๋ณต ํ›„์— ๋‹ค์Œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

RangeError : ์ตœ๋Œ€ ํ˜ธ์ถœ ์Šคํƒ ํฌ๊ธฐ๋ฅผ ์ดˆ๊ณผํ–ˆ์Šต๋‹ˆ๋‹ค.

๋น„๋™๊ธฐ 1.5.2๋กœ ๋˜ ๋Œ๋ ธ์„ ๋•Œ ์œ„ ์ฝ”๋“œ๋Š” ์˜ˆ์ƒ๋Œ€๋กœ ์ž‘๋™ํ–ˆ์Šต๋‹ˆ๋‹ค.

question

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

์ด๊ฒƒ์ด ๋น„๋™๊ธฐ 1.5.2์—์„œ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋Š” ์ฝœ๋ฐฑ์ด ํ•ด๋‹น ๋ฒ„์ „์—์„œ ํ•ญ์ƒ ๋น„๋™๊ธฐ ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ 2์—์„œ๋Š”์ด ๊ฐ€๋“œ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค (https://github.com/caolan/async/blob/master/intro.md#synchronous-iteration-functions ์ฐธ์กฐ).

๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด async.ensureAsync(cb) ๋˜๋Š” async.setImmediate(cb) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ๊ท€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var counter = 2000;

async.eachSeries(
  new Array(counter),
  (item, cb) => {
    async.parallel([
      (pCb) => {
        console.log(counter--);
        async.setImmediate(pCb);
      },
    ], cb);
  },
  () => console.log('done')
);

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

+1

+1

์ด๊ฒƒ์ด ๋น„๋™๊ธฐ 1.5.2์—์„œ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋Š” ์ฝœ๋ฐฑ์ด ํ•ด๋‹น ๋ฒ„์ „์—์„œ ํ•ญ์ƒ ๋น„๋™๊ธฐ ์ ์œผ๋กœ ํ˜ธ์ถœ๋˜์—ˆ๋Š”์ง€ ํ™•์ธํ–ˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค. ๋ฒ„์ „ 2์—์„œ๋Š”์ด ๊ฐ€๋“œ๋ฅผ ์ œ๊ฑฐํ–ˆ์Šต๋‹ˆ๋‹ค (https://github.com/caolan/async/blob/master/intro.md#synchronous-iteration-functions ์ฐธ์กฐ).

๋”ฐ๋ผ์„œ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ˆ˜์ •ํ•˜๊ธฐ ์œ„ํ•ด async.ensureAsync(cb) ๋˜๋Š” async.setImmediate(cb) ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์žฌ๊ท€ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

var counter = 2000;

async.eachSeries(
  new Array(counter),
  (item, cb) => {
    async.parallel([
      (pCb) => {
        console.log(counter--);
        async.setImmediate(pCb);
      },
    ], cb);
  },
  () => console.log('done')
);
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰