Async: ์ธ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ๋™์ ์œผ๋กœ ํ‘ธ์‹œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Async.js(๋ณ‘๋ ฌ ๋˜๋Š” ๊ฒฝ์Ÿ ๋ชจ๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

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

ํ˜„์žฌ Node.JS๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค๋ฅธ ์ธ์ˆ˜๋กœ ๋™์ผํ•œ ๊ธฐ๋Šฅ์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด Async.js๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋ฐฐ์—ด์— ํ•จ์ˆ˜๋ฅผ ํ‘ธ์‹œ/์Šคํƒํ•˜๋ ค๊ณ  ์• ์“ฐ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
๋ฌธ์ œ๋Š” ํ•จ์ˆ˜๊ฐ€ ๋™์ผํ•œ ์ธ์ˆ˜๋กœ ์‹คํ–‰๋œ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๊ฒƒ์ด ๋‚ด๊ฐ€ ๊ฐ€์ง„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var async = require("async");
var array = [];
var x = [1,2,3,4];

// This portion of code works perfect and the arguments are passed perfectly
// The results that i am getting are: [100, 200, 300, 400]
array.push(function(callback){ callback(null,calculate(x[0]))});
array.push(function(callback){ callback(null,calculate(x[1]))});
array.push(function(callback){ callback(null,calculate(x[2]))});
array.push(function(callback){ callback(null,calculate(x[3]))});

// This portion of code does not work and I dont know why ... 
// The results that i am getting are: [400, 400, 400, 400]
// Obviusly the function is receiving the same argument a=4 everytime is called
for (i=0;i<3;i++){
    array.push(function(callback){ callback(null,calculate(x[i]))});
}

async.parallel(array,function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});


function calculate(a) {
  return a*100
}

์–ด๋–ค ์•„์ด๋””์–ด๋ผ๋„?
๊ฐ์‚ฌ

question

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

์—ฌ๊ธฐ์—๋Š” ๊ธฐ๋ณธ์ ์ธ JS ๋ณ€์ˆ˜ ๋ฒ”์œ„ ์ง€์ • ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์งง์€ ๋Œ€๋‹ต์€ async.map ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ๋กœ๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

async.map([1, 2, 3, 4], function(x, callback){
  callback(null,calculate(x))
}, function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});

๊ทธ๋Ÿฌ๋‚˜ ์ง„์ •ํ•œ ๋Œ€๋‹ต์€ Async๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var result = [1, 2, 3, 4].map(calculate)

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

์—ฌ๊ธฐ์—๋Š” ๊ธฐ๋ณธ์ ์ธ JS ๋ณ€์ˆ˜ ๋ฒ”์œ„ ์ง€์ • ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์งง์€ ๋Œ€๋‹ต์€ async.map ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ๋กœ๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

async.map([1, 2, 3, 4], function(x, callback){
  callback(null,calculate(x))
}, function(err,result){
    if (err) {
        console.log(err);
        return;
    }
    console.log("Results are: " + result);
});

๊ทธ๋Ÿฌ๋‚˜ ์ง„์ •ํ•œ ๋Œ€๋‹ต์€ Async๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var result = [1, 2, 3, 4].map(calculate)

๋งค์šฐ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ...

๋‚ด iPhone์—์„œ ๋ณด๋‚ธ

2016๋…„ 4์›” 7์ผ ์˜คํ›„ 7์‹œ 42๋ถ„์— Alex Early [email protected] ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ผ์Šต๋‹ˆ๋‹ค.

์—ฌ๊ธฐ์—๋Š” ๊ธฐ๋ณธ์ ์ธ JS ๋ณ€์ˆ˜ ๋ฒ”์œ„ ์ง€์ • ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์งง์€ ๋Œ€๋‹ต์€ async.map์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ๋กœ๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

async.map([1, 2, 3, 4], function(x, ์ฝœ๋ฐฑ){
์ฝœ๋ฐฑ(๋„, ๊ณ„์‚ฐ(x))
}, ํ•จ์ˆ˜(์˜ค๋ฅ˜,๊ฒฐ๊ณผ){
๋งŒ์•ฝ (์˜ค๋ฅ˜) {
console.log(์˜ค๋ฅ˜);
๋ฐ˜ํ’ˆ;
}
console.log("๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. " + result);
});
๊ทธ๋Ÿฌ๋‚˜ ์ง„์ •ํ•œ ๋Œ€๋‹ต์€ Async๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var ๊ฒฐ๊ณผ = [1, 2, 3, 4].map(๊ณ„์‚ฐ)
โ€”
์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์•ˆ๋…• ์นด์˜ค๋ž€
๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์ง€๋งŒ "๊ฒฝ์ฃผ" ๋ชจ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
์ด๋ฏธ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๋จผ์ € ์™„๋ฃŒํ•œ ์‚ฌ๋žŒ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
Async.race๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?
๋ฌธ์•ˆ ์ธ์‚ฌ,
์•Œํ”„๋ ˆ๋„ ๋ณด๋ ˆ๋กœ
๋‚ ์งœ: 2016๋…„ 4์›” 7์ผ ๋ชฉ์š”์ผ 18:42:25 -0700
๋ณด๋‚ธ ์‚ฌ๋žŒ: ์•Œ๋ฆผ@github.com
๋ฐ›๋Š” ์‚ฌ๋žŒ: [email protected]
์ฐธ์กฐ: [email protected]
์ œ๋ชฉ: Re: [caolan/async] ์ธ์ˆ˜๊ฐ€ ๋‹ค๋ฅธ ํ•จ์ˆ˜๋ฅผ ๋ฐฐ์—ด์— ๋™์ ์œผ๋กœ ํ‘ธ์‹œํ•˜๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? Async.js(๋ณ‘๋ ฌ ๋˜๋Š” ๊ฒฝ์Ÿ ๋ชจ๋“œ)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(#1104).

์—ฌ๊ธฐ์—๋Š” ๊ธฐ๋ณธ์ ์ธ JS ๋ณ€์ˆ˜ ๋ฒ”์œ„ ์ง€์ • ๋ฌธ์ œ๋ฅผ ํฌํ•จํ•˜์—ฌ ๋งŽ์€ ๊ฒƒ๋“ค์ด ์žˆ์Šต๋‹ˆ๋‹ค. ๊ท€ํ•˜์˜ ์งˆ๋ฌธ์— ๋Œ€ํ•œ ์งง์€ ๋Œ€๋‹ต์€ async.map์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋ณ‘๋ ฌ๋กœ๋„ ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค.

async.map([1, 2, 3, 4], function(x, ์ฝœ๋ฐฑ){
์ฝœ๋ฐฑ(๋„, ๊ณ„์‚ฐ(x))
}, ํ•จ์ˆ˜(์˜ค๋ฅ˜,๊ฒฐ๊ณผ){
๋งŒ์•ฝ (์˜ค๋ฅ˜) {
console.log(์˜ค๋ฅ˜);
๋ฐ˜ํ’ˆ;
}
console.log("๊ฒฐ๊ณผ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค. " + result);
});

๊ทธ๋Ÿฌ๋‚˜ ์ง„์ •ํ•œ ๋Œ€๋‹ต์€ Async๊ฐ€ ์ „ํ˜€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

var ๊ฒฐ๊ณผ = [1, 2, 3, 4].map(๊ณ„์‚ฐ)

โ€”
์Šค๋ ˆ๋“œ๋ฅผ ์ž‘์„ฑํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๋ฉ”์‹œ์ง€๋ฅผ ๋ฐ›๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.
์ด ์ด๋ฉ”์ผ์— ์ง์ ‘ ๋‹ต์žฅํ•˜๊ฑฐ๋‚˜ GitHub์—์„œ ํ™•์ธํ•˜์„ธ์š”.

์•ˆ๋…• ์นด์˜ค๋ž€

๋„์›€์„ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜๊ฒŒ ์ž‘๋™ํ–ˆ์ง€๋งŒ "๊ฒฝ์ฃผ" ๋ชจ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ์ด๋ฏธ ์—ฌ๋Ÿฌ ๋ฒˆ ์‹œ๋„ํ–ˆ๋Š”๋ฐ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
๋‚ด ๋ชจ๋“  ๊ธฐ๋Šฅ์„ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰ํ•˜๊ณ  ๋จผ์ € ์™„๋ฃŒํ•œ ์‚ฌ๋žŒ์˜ ๊ฒฐ๊ณผ๋ฅผ ์–ป๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.
Async.race๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๋ฌธ์•ˆ ์ธ์‚ฌ,

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