Async: ๊ฐ ์ž‘์—…์ด ๋ชจ๋“  ์ด์ „ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ์ˆ˜์‹ ํ•˜๋Š” async.series ๋ฒ„์ „

์— ๋งŒ๋“  2015๋…„ 11์›” 16์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: caolan/async

async.series ์ž‘์—…์ด ์—ฌ๋Ÿฌ ์ด์ „ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ํ•„์š”๋กœ ํ•˜๋Š” ์ƒํ™ฉ์ด ์ž์ฃผ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. async.waterfall์€ ๋งˆ์ง€๋ง‰ ์ด์ „ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋งŒ ์ œ๊ณตํ•˜๋ฏ€๋กœ ์ถฉ๋ถ„ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. async,auto๋Š” ๋„ˆ๋ฌด ์žฅํ™ฉํ•˜๊ณ  ๋ถˆํ•„์š”ํ•œ ์ข…์†์„ฑ ์„ ์–ธ์„ ์ถ”๊ฐ€๋กœ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ(๋˜๋Š” async.series์˜ ๊ฐœ์„  ์‚ฌํ•ญ)์ด ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๊ฐ ์ž‘์—…์€ ๋ชจ๋“  ์ด์ „ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ํฌํ•จํ•˜๋Š” ๊ฒฐ๊ณผ ๊ฐœ์ฒด๋ฅผ ๋ฐ›์Šต๋‹ˆ๋‹ค.

๊ฐ€๋Šฅํ•œ ์ด๋ฆ„: ๋ˆ„์ , ์‹œ๋ฆฌ์ฆˆ ๋ˆ„์ 

์˜ˆ์‹œ:

async.accumulate({
    one: function(callback){
        setTimeout(function(){
            callback(null, 1);
        }, 200);
    },
    two: function(callback, results){
        // results: {one: 1}
        setTimeout(function(){
            callback(null, 2);
        }, 100);
    },
    three: function(callback, results){
         // results: {one: 1, two: 2}
        setTimeout(function(){
            callback(null, results.one + results.two);
        }, 100);
    }
},
function(err, results) {
    // results is now equal to: {one: 1, two: 2, three: 3}
});
feature question

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

async.auto ์ฒดํฌ์•„์›ƒ

์•ž์„œ ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ๊ฐ„๋‹จํ•œ ์‹œ๋ฆฌ์ฆˆ ์‹œ๋‚˜๋ฆฌ์˜ค์—์„œ async.auto๋Š” ๋„ˆ๋ฌด ์žฅํ™ฉํ•ฉ๋‹ˆ๋‹ค. ์‚ฌ์šฉ์ž๋Š” ๊ฐ ๋‹จ๊ณ„๊ฐ€ ์ด์ „ ๋‹จ๊ณ„์— ์ข…์†๋˜์–ด ์žˆ๋‹ค๊ณ  ์„ ์–ธํ•ด์•ผ ํ•˜๋ฏ€๋กœ ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋ณด๊ธฐ ํ‰ํ•œ ๋ฐฐ์—ด๊ณผ ์ค‘๋ณต ๋‹จ๊ณ„ ์ด๋ฆ„์ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

async.auto({
    one: function(callback){
        setTimeout(function(){
            callback(null, 1);
        }, 200);
    },
    two: ["one", function(callback, results){
        setTimeout(function(){
            callback(null, 2);
        }, 100);
    }],
    three: ["two", function(callback, results){
        setTimeout(function(){
            callback(null, results.one + results.two);
        }, 100);
    }
   ]
},
function(err, results) {
    // results is now equal to: {one: 1, two: 2, three: 3}
});

๋‹ค์Œ ์ฃผ์š” ๋ฆด๋ฆฌ์Šค์—์„œ auto์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๊ฐœ์„  ์‚ฌํ•ญ์„ ๋งŒ๋“ค ์˜ˆ์ •์ž…๋‹ˆ๋‹ค. ํ•ญ์ƒ ์ฝœ๋ฐฑ์ด ๋งˆ์ง€๋ง‰์— ์žˆ๊ณ  ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„์—์„œ ์ข…์†์„ฑ์„ ์œ ์ถ”ํ•˜๋Š” autoInject (#608)๋„ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ์ฒด ํ‚ค์˜ ์ˆœ์„œ์— ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ด ์ œ์•ˆ์ด ๋งˆ์Œ์— ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์ด๋Š” JS ํ™˜๊ฒฝ ์ „์ฒด์—์„œ ๋ณด์žฅ๋˜์ง€ ์•Š์œผ๋ฉฐ ์ž‘์€ ๊ฐ์ฒด์˜ ๊ฒฝ์šฐ ๋…ธ๋“œ์—์„œ๋งŒ ๋ณด์žฅ๋ฉ๋‹ˆ๋‹ค. ๋ฐฐ์—ด์„ ์‚ฌ์šฉํ•˜๋ฉด ๊ฐ€๋Šฅํ•˜์ง€๋งŒ async.waterfall ์™€ ๋„ˆ๋ฌด ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ autoInject ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒฝ์šฐ auto ์™€ waterfall ์‚ฌ์ด์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์Šต๋‹ˆ๋‹ค.

์›ํ•˜๋Š” ๊ฒƒ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐฉ๋ฒ•:

function seriesAccumulate(tasks, done) {
  async.reduce(tasks, [], function (results, task, next) {
    task(results, function (err, result) {
      results.push(result);
      next(err, result);
    });
  }, done);
}

๊ฐœ์ฒด๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฐ์†์ ์œผ๋กœ ๋ฐ˜๋ณตํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

๋‹ซ์Šต๋‹ˆ๋‹ค. ์Šคํƒ€์ผ์—์„œ series ์™€ waterfall ์‚ฌ์ด์— ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์ด ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

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