์ด๋ค ๋ฒ์ ์ ๋น๋๊ธฐ๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๊น?
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๋ก ๋ ๋๋ ธ์ ๋ ์ ์ฝ๋๋ ์์๋๋ก ์๋ํ์ต๋๋ค.
+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')
);
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ด๊ฒ์ด ๋น๋๊ธฐ 1.5.2์์ ์๋ํ๋ ์ด์ ๋ ์ฝ๋ฐฑ์ด ํด๋น ๋ฒ์ ์์ ํญ์ ๋น๋๊ธฐ ์ ์ผ๋ก ํธ์ถ๋์๋์ง ํ์ธํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๋ฒ์ 2์์๋์ด ๊ฐ๋๋ฅผ ์ ๊ฑฐํ์ต๋๋ค (https://github.com/caolan/async/blob/master/intro.md#synchronous-iteration-functions ์ฐธ์กฐ).
๋ฐ๋ผ์ ์คํฌ๋ฆฝํธ๋ฅผ ์์ ํ๊ธฐ ์ํด
async.ensureAsync(cb)
๋๋async.setImmediate(cb)
๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ๊ท ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ ์ ์์ต๋๋ค.