Async: forEachOf-์ตœ์ข… ์ฝœ๋ฐฑ์ด ํ˜ธ์ถœ๋˜์ง€ ์•Š์Œ

์— ๋งŒ๋“  2015๋…„ 06์›” 29์ผ  ยท  1๋…ผํ‰  ยท  ์ถœ์ฒ˜: caolan/async

ํŽธ์ง‘ : ๋ฌธ์ œ๊ฐ€ ํ•ด๊ฒฐ๋˜์—ˆ์Šต๋‹ˆ๋‹ค (๋„ˆ๋ฌด ๋นจ๋ฆฌ ๋งํ–ˆ์Šต๋‹ˆ๋‹ค!) ... (์•„๋ž˜๋ฅผ๋ณด์‹ญ์‹œ์˜ค)

.forEachOf ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ฃผ์–ด์ง„ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜๋ณต ํ•œ ํ›„ ์ฝœ๋ฐฑ์„ ๋˜์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์œ ์ผํ•œ ๋ฌธ์ œ๋Š” forEachOf์— ๋Œ€ํ•œ ์„ธ ๋ฒˆ์งธ ์ธ์ˆ˜๋กœ ์ „๋‹ฌ ๋œ ์ตœ์ข… ์ฝœ๋ฐฑ์ด ๋˜์ ธ์ง€์ง€ ์•Š๋Š”๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋‹ค์Œ์€ ๋ฌธ์ œ์˜ ์ƒ˜ํ”Œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค.

var async = require('async');

var anArray = [];

var testObj = {
    'a': '1',
    'b': '2',
    'c': '3'
};

async.forEachOf(testObj, function (elem, key, callback) {
    console.log(elem);

    anArray.push(elem);
}, function (err) {
    if (err) {
        console.error(err.message);
    }

    console.log("This line should be printed at the end.", anArray);
});

์—ฌ๊ธฐ Runnable์— ์žˆ์Šต๋‹ˆ๋‹ค : http://code.runnable.com/VZELB92Qa1Y7JQuq/async-foreachof-node-js-not-working-2-for-callback

์ด์ œ ์—ฌ๊ธฐ์—์„œ ์™„์ „ํžˆ ์ž˜๋ชป๋œ ์ผ์„ ํ•  ์ˆ˜ ์žˆ์ง€๋งŒ์ด ์งˆ๋ฌธ์„ reddit ๋ฐ Stack Overflow์˜ / r / node์— ๊ฒŒ์‹œํ–ˆ์œผ๋ฉฐ ์œ ์šฉํ•œ ๋‹ต๋ณ€์„ ์–ป์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์—ฌ๊ธฐ์„œ ๋ญ˜ ์ž˜๋ชปํ•˜๊ณ  ์žˆ๋‹ˆ? ์ด๊ฒƒ์€ ๋‚˜๋ฅผ ๋ฏธ์น˜๊ฒŒ ๋งŒ๋“ ๋‹ค !!!

ํŽธ์ง‘ :์ด ์ดˆ๊ธฐ ์˜ˆ์ œ์—์„œ 'return callback ()'๋ฌธ์„ ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ์žŠ์€ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‚ด ์ฝ”๋“œ์—์„œ ์‹ค์ œ๋กœ์ด ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํŠน์ • ์˜ˆ์ œ์—์„œ์ด 'return callback ()'๋ฌธ์„ ๋งŒ๋“œ๋Š” ๋‘ ๋ฒˆ์งธ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‘ ๋ฒˆ์งธ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ ์‹คํ–‰์ด ์™„๋ฃŒ๋˜๋ฉด ์ฝœ๋ฐฑ์„ ํ˜ธ์ถœํ•˜๊ธฐ ์œ„ํ•ด ๋‹ค๋ฅธ ์ œ์–ด ํ๋ฆ„ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ž…๋‹ˆ๋‹ค. ์ฃ„์†กํ•ฉ๋‹ˆ๋‹ค. ์ด ๋ฌธ์ œ๋ฅผ ์ตœ๋Œ€ํ•œ ๋นจ๋ฆฌ ์ข…๋ฃŒํ•˜์‹ญ์‹œ์˜ค !!!

๋ฐ˜๋ฉด์— 'return callback ()'๋ฌธ์„ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•„๋Š” ๊ฒƒ์ด์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๋Š” ๋‹ค๋ฅธ ๋ฏธ๋ž˜ ์‚ฌ์šฉ์ž์—๊ฒŒ ๋„์›€์ด ๋  ๊ฒƒ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜์—ญ์—๋Š” ๋ฌธ์„œ๊ฐ€ ํ™•์‹คํžˆ ๋ถ€์กฑํ•˜๊ณ ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ฐœ๋ณ„ ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•œ ๋‚ด์šฉ์ด์žˆ๋Š” ๊ทธ๋Œ€๋กœ๋Š” ๊ทธ๋ฆฌ ๋งŽ์ง€ ์•Š์œผ๋ฏ€๋กœ ๋„์›€๋ง์„ ์ฐพ๋Š” ๊ฒƒ์€ ์—„์ฒญ๋‚˜๊ฒŒ ๋Š๋ฆฌ๊ณ  ์ง€๋ฃจํ•˜๋ฉฐ ์–ด๋ ต์Šต๋‹ˆ๋‹ค!

question

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

์ž„๋งˆ ๋‹น์‹ ์€ ๋งค ๋ฐ˜๋ณต ํ›„์— 'callback ()'์„ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

async.forEachOf(testObj, function (elem, key, callback) {
    console.log(elem);
    anArray.push(elem);
callback() //<<<<<<<<<
},...

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

์ž„๋งˆ ๋‹น์‹ ์€ ๋งค ๋ฐ˜๋ณต ํ›„์— 'callback ()'์„ ํ˜ธ์ถœํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

async.forEachOf(testObj, function (elem, key, callback) {
    console.log(elem);
    anArray.push(elem);
callback() //<<<<<<<<<
},...
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰