Axios: catch๋Š” ์˜ค๋ฅ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2016๋…„ 03์›” 02์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: axios/axios

catch๊ฐ€ ์˜ค๋ฅ˜ ๊ฐœ์ฒด๊ฐ€ ์•„๋‹Œ ๊ฐœ์ฒด๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

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

์ด๊ฒƒ์ด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” Angular์˜ $http๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‹ค์†Œ๊ฐ„ ๊ทธ๊ฒƒ์€ ์ธ๊ณต๋ฌผ์ด๋ฉฐ ์ผ์„ ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ด€๋ จ๋˜๋Š” ๊ฒฝ์šฐ ์‘๋‹ต ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์ฒจ๋ถ€๋œ Error ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ณด๋‹ค ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

function createError(message, details) {
  var err = new Error(message);

  Object.keys(details, function (key) {
    err[key] = details[key];
  });

  return err;
}

createError('timeout of ' + config.timeout + 'ms exceeded', {
  code: 'ECONNABORTED',
  config: config
});

๋˜ํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ์— ๊ด€๊ณ„์—†์ด ์‹ค์ œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ Promise ๋งŒ ๊ฑฐ๋ถ€ํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ด์ œ 200-300 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์€ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

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

์ด๊ฒƒ์ด ์ด ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” Angular์˜ $http๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ๋‹ค์†Œ๊ฐ„ ๊ทธ๊ฒƒ์€ ์ธ๊ณต๋ฌผ์ด๋ฉฐ ์ผ์„ ํ•˜๋Š” ์˜ฌ๋ฐ”๋ฅธ ๋ฐฉ๋ฒ•์€ ์•„๋‹™๋‹ˆ๋‹ค. ๊ด€๋ จ๋˜๋Š” ๊ฒฝ์šฐ ์‘๋‹ต ์„ธ๋ถ€ ์ •๋ณด๊ฐ€ ์ฒจ๋ถ€๋œ Error ๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ๋ณด๋‹ค ์ผ๊ด€๋œ ์˜ค๋ฅ˜ ๊ฒฝ๋กœ๋กœ ์ด๋™ํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

function createError(message, details) {
  var err = new Error(message);

  Object.keys(details, function (key) {
    err[key] = details[key];
  });

  return err;
}

createError('timeout of ' + config.timeout + 'ms exceeded', {
  code: 'ECONNABORTED',
  config: config
});

๋˜ํ•œ HTTP ์ƒํƒœ ์ฝ”๋“œ์— ๊ด€๊ณ„์—†์ด ์‹ค์ œ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ Promise ๋งŒ ๊ฑฐ๋ถ€ํ•˜๋„๋ก ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ณ€๊ฒฝํ•˜๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค. ๋ฐ˜๋ฉด ์ด์ œ 200-300 ๋ฒ”์œ„๋ฅผ ๋ฒ—์–ด๋‚˜๋Š” ๊ฒƒ์€ ๊ฑฐ๋ถ€๋ฉ๋‹ˆ๋‹ค.

@mzabriskie
๋˜ํ•œ config ํ”Œ๋ž˜๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ 2xx/3xx๊ฐ€ ์•„๋‹Œ ์‘๋‹ต์ด ๋ฐ˜ํ™˜๋  ๋•Œ ์ทจํ•ด์•ผ ํ•  ์กฐ์น˜๋ฅผ ๊ฒฐ์ •ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

request-promise lib๋Š” ์ด๋ฅผ ์œ„ํ•ด simple ํ”Œ๋ž˜๊ทธ/์˜ต์…˜์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. simple ๊ฐ€ true ์ผ ๋•Œ request-promise๋Š” ๋„คํŠธ์›Œํฌ๊ฐ€ ์•„๋‹Œ ์˜ค๋ฅ˜(2xx, 3xx)์— ๋Œ€ํ•ด ๊ฑฐ๋ถ€ํ•ฉ๋‹ˆ๋‹ค. ํ”Œ๋ž˜๊ทธ๊ฐ€ false์ด๋ฉด ์•„๋ฌด ๊ฒƒ๋„ ๊ฑฐ๋ถ€ํ•˜์ง€ ์•Š์œผ๋ฉฐ ์‚ฌ์šฉ์ž์˜ ์ฑ…์ž„์ด ๋ฉ๋‹ˆ๋‹ค. ๋‚˜๋Š” ์ด๊ฒƒ์ด ๋งค์šฐ ์œ ์šฉํ•˜๋‹ค๋Š” ๊ฒƒ์„ ์•Œ์•˜๊ณ  ๋‘ ์„ค์ •์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•˜๋Š” ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ๋” ๋‚˜์€ ๊ธฐ๋ณธ IMO์ด๊ธฐ ๋•Œ๋ฌธ์— ์ผ๋ฐ˜์ ์œผ๋กœ true ๋กœ ๋‹จ์ˆœํ•˜๊ฒŒ ์„ค์ •ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

https://github.com/request/request-promise#get -a-rejection-only-if-the-request-failed-for-technical-reasons

#24์˜ ์ค‘๋ณต์œผ๋กœ ์ข…๋ฃŒ

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