<p>async.auto &amp; try ... catch์˜ ํฅ๋ฏธ๋กœ์šด ๊ฒฝ์šฐ</p>

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

์–ด๋–ค ๋ฒ„์ „์˜ ๋น„๋™๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
v2.5.0
(๋…ธ๋“œ ๋ฒ„์ „ / ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „)์—์„œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ํ™˜๊ฒฝ
v6.10.3
๋ญ ํ–ˆ์–ด?

async.auto({
  returnOne: (callback) => callback(null, 1),
  tryCatch: ["returnOne", (results, callback) => {
    try {
      assert(results.returnOne === 1);
      return callback(null);
    } catch (err) {
      console.log(`Caught an error: ${err.message}`);
      return callback(err);
    }
  }],
}, (err, results) => {
  assert(results.returnOne !== 1);
  console.log(`All Done!`);
});

๋ฌด์Šจ ์ผ์ด ์ผ์–ด๋‚˜๊ธฐ๋ฅผ ๊ธฐ๋Œ€ ํ–ˆ์Šต๋‹ˆ๊นŒ?
์ตœ์ข… aync.auto ์ฝœ๋ฐฑ ๋‚ด์˜ ์–ด์„ค ์…˜์ด ์‹คํŒจํ•˜๊ณ  ํฌ์ฐฉ๋˜์ง€ ์•Š์€ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•˜๊ณ  Node.js ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ค‘์ง€๋ฉ๋‹ˆ๋‹ค. ์ด์— ๋Œ€ํ•œ ์‹ค์ œ ์‚ฌ๋ก€์—์„œ๋Š” ์˜ค๋ฅ˜๋ฅผ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹คํŒจ๋ฅผ ์ผ์œผํ‚จ ์ฃผ์žฅ์— ๋Œ€ํ•œ ์ •๋ณด์™€ ํ•จ๊ป˜ ํ…Œ์ŠคํŠธ๊ฐ€ ์‹คํŒจํ–ˆ๋‹ค๊ณ ๋ณด๊ณ ํ•˜๋Š” Mocha ๋‚ด์˜ ์ฝ”๋“œ ๋ธ”๋ก์„ ํ…Œ์ŠคํŠธํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์‹ค์ œ ๊ฒฐ๊ณผ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?
์ด์ „ ์ž๋™ ๋‹จ๊ณ„์˜ Try / Catch๊ฐ€ ์˜ค๋ฅ˜๋ฅผ ํฌ์ฐฉํ•˜๊ณ  tryCatch ์ฝœ๋ฐฑ์„ ๋‘ ๋ฒˆ ํ˜ธ์ถœํ•˜์—ฌ ๋‹ค๋ฅธ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

async/dist/async.js:903
        if (fn === null) throw new Error("Callback was already called.");
                         ^
Error: Callback was already called.
question

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

try {
  //...
  return callback(null, result)
} catch (e) {
  //..
  return callback(e)
}

์ฝœ๋ฐฑ ์ฒด์ธ (์˜ˆ : ์–ด์„ค ์…˜)์—์„œ ๋‚˜์ค‘์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋˜์ ธ์ง€๋ฉด try ๋ธ”๋ก์— ๊ฑธ๋ ค catch ์—์„œ ์ด์ค‘ ์ฝœ๋ฐฑ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋Œ€ํ•œ ์•ˆํ‹ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ• :

let err, result
try {
  result = doSomething()
} catch (e) {
  err = e
}
callback(err, result)

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

try {
  //...
  return callback(null, result)
} catch (e) {
  //..
  return callback(e)
}

์ฝœ๋ฐฑ ์ฒด์ธ (์˜ˆ : ์–ด์„ค ์…˜)์—์„œ ๋‚˜์ค‘์— ๋ฌด์–ธ๊ฐ€๊ฐ€ ๋˜์ ธ์ง€๋ฉด try ๋ธ”๋ก์— ๊ฑธ๋ ค catch ์—์„œ ์ด์ค‘ ์ฝœ๋ฐฑ์ด ๋ฐœ์ƒํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๊ฑฐ๋Œ€ํ•œ ์•ˆํ‹ฐ ํŒจํ„ด์ž…๋‹ˆ๋‹ค. ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ• :

let err, result
try {
  result = doSomething()
} catch (e) {
  err = e
}
callback(err, result)

@aearly ๋ง์ด ๋˜๋„ค์š”, ํŒ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!

(๋˜ํ•œ ์•ˆ๋…•ํ•˜์„ธ์š”! ๐Ÿ‘‹)

๐Ÿ‘‹๐Ÿ˜Š

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