api ์ˆœ์ฐจ์  ์‹คํ–‰ | catch (err) vs catch | throw error vs return error

2024. 5. 22. 23:59ยท JavaScript
๋ชฉ์ฐจ
  1. ์ƒํ™ฉ
  2. ๋ฆฌํŒฉํ† ๋ง
  3. catch (err) {} vs catch {}
  4. throw error vs return error

์ƒํ™ฉ

1๋ฒˆ์งธ api ์š”์ฒญ ๊ฒฐ๊ณผ์— ๋”ฐ๋ผ์„œ 2๋ฒˆ์งธ api๊ฐ€ ์ฒ˜๋ฆฌ๋˜๋„๋ก ๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜๊ณ  ์‹ถ๋‹ค.

 

1๋ฒˆ์งธ api 

์‚ฌ์šฉ์ž๊ฐ€ ์ž…๋ ฅํ•œ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š”์ง€ ํ™•์ธ 

//์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ ํ™•์ธ
checkCurrentPassword: builder.mutation({
query: (password: string) => ({
url: ๋น„๋ฐ€๋ฒˆํ˜ธํ™•์ธ ์š”์ฒญ ์ฃผ์†Œ,
method: 'POST',
headers: {
'Content-type': 'text/plain',
},
body: password,
}),
}),

 

2๋ฒˆ์งธ api

์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋ณ€๊ฒฝ

//๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ
updatePasswordQuery: builder.mutation({
query: (password: string) => ({
url: ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์ฃผ์†Œ,
method: 'PATCH',
headers: {
'Content-type': 'text/plain',
},
body: password,
}),
}),

 

1๋ฒˆ์งธ api์—์„œ ์‚ฌ์šฉ์ž๊ฐ€ ์›๋ž˜ ์“ฐ๋˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•˜๋ฉด 2๋ฒˆ์งธ api ํ˜ธ์ถœ์ด ๋˜์ง€ ์•Š์•„์•ผํ•œ๋‹ค. ์ด์ „๊ณผ ๋‹ค๋ฅธ ์ƒˆ๋กœ์šด ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ•ด๋‹ฌ๋ผ๋Š” alert์„ ๋„์šด๋‹ค.

๋”ฐ๋ผ์„œ, 1๋ฒˆ์งธ api์˜ ์‘๋‹ต์ด ์‹คํŒจํ•ด์•ผ์ง€ (์‚ฌ์šฉ์ž๊ฐ€ ์›๋ž˜ ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ผ์น˜ํ•˜๋Š” ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ž…๋ ฅํ–ˆ์–ด์•ผ์ง€) 2๋ฒˆ์งธ api๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค.

 

์ด ๋กœ์ง์˜ ํ•จ์ˆ˜๋ฅผ ์ฒ˜์Œ์—” ์ด๋ ‡๊ฒŒ ์ž‘์„ฑํ–ˆ๋‹ค. (http ํ†ต์‹  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ๋Š” RTK Query ์‚ฌ์šฉ)

checkCurrentPassword(passwordInputValue)
.unwrap()
.then(() => {
//"์ด์ „๊ณผ ๋‹ค๋ฅธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ž…๋ ฅํ•ด์ฃผ์„ธ์š”" ๋ฅผ ํ™”๋ฉด์—์„œ ๋„์šธ ๋กœ์ง
})
.catch(() => {
//๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์„œ๋ฒ„์— ์š”์ฒญ
updatePasswordQuery(passwordInputValue)
.unwrap()
.then(() => {
//์„ฑ๊ณต์‹œ ์ฒ˜๋ฆฌํ•  ๋กœ์ง
})
.catch((err) =>
toast.error('๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์‹คํŒจ. ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”'),
);
});

 

๋จผ์ €, 1๋ฒˆ์งธ api์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ์ผ์น˜ ํ™•์ธ api ์š”์ฒญ์„ ํ•˜๊ณ , then()์œผ๋กœ ์„ฑ๊ณต ์‘๋‹ต์ด ์˜ค๋ฉด ํ™”๋ฉด์— ๋ณด์—ฌ์ค„ ๋กœ์ง๋งŒ ์ž‘๋™๋˜๊ฒŒ ํ•œ๋‹ค.

1๋ฒˆ์งธ api์˜ ์š”์ฒญ์ด ์‹คํŒจํ•ด์•ผ์ง€๋งŒ catch() ์ ˆ์—์„œ ๋ฐ›์•„์„œ catch() ๋‚ด๋ถ€์—์„œ 2๋ฒˆ์งธ api์ธ ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ์„ ์š”์ฒญํ•˜๊ณ , 2๋ฒˆ์งธ api๊ฐ€ ์ฒ˜๋ฆฌํ•ด์•ผํ•  ๋กœ์ง๋„ then๊ณผ catch๋กœ ๋‚˜๋ˆ„์–ด์ฃผ์–ด ์ž‘์„ฑํ–ˆ๋‹ค.

์œ„์—์„  ๋กœ์ง์„ ๊ฐ„์ถ”๋ ค์„œ ์ ์šฉํ–ˆ์ง€๋งŒ, ์‹ค์ œ ์ฝ”๋“œ๋Š” ์„ฑ๊ณต์‹œ ์ฒ˜๋ฆฌํ•  ๋กœ์ง์ด ๋ณต์žกํ•˜๋‹ค. ์›น๋ทฐ์ธ์ง€ ์›น๋ธŒ๋ผ์šฐ์ €์ธ์ง€์— ๋”ฐ๋ผ ์กฐ๊ฑด๋ฌธ์„ ์ค˜์„œ ๋‚ด๋ถ€์— ๋กœ์ง์ด ๋” ์กด์žฌํ•œ๋‹ค. 

์˜ค๋Š˜ ์ฝ”๋“œ๋ฆฌ๋ทฐ์—์„œ ๋™๋ฃŒ๊ฐ€ ์œ„ ์ฝ”๋“œ์˜ depth ๊ฐ€ ๊นŠ์–ด ์ฝ”๋“œ๋ฅผ ์ฝ๋‹ค๊ฐ€ ๊ธธ์„ ์žƒ์—ˆ๋‹ค๋Š” ํ”ผ๋“œ๋ฐฑ์„ ๋ฐ›์•˜๋‹ค.! 

 

๋ฆฌํŒฉํ† ๋ง

then catch ์ ˆ๋กœ ์ž‘์„ฑํ•˜์—ฌ depth๊ฐ€ ๊นŠ์–ด์กŒ๋˜ ๊ฒƒ์„ ๋ง‰๊ณ , ํ”„๋ผ๋ฏธ์Šค๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” async await ํ‚ค์›Œ๋“œ์™€ try/catch ์ ˆ์„ ์‚ฌ์šฉํ•ด์„œ 1๋ฒˆ์งธ api์™€ 2๋ฒˆ์งธ api๊ฐ€ ๊ฐ์ž ์ž๊ธฐ ์—ญํ• ์—๋งŒ ์ถฉ์‹คํ•˜๋„๋ก ํ•จ์ˆ˜๋ฅผ ๋ถ„๋ฆฌํ•œ๋‹ค. 

1๋ฒˆ์งธ api๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ํ•จ์ˆ˜์—์„œ ์—๋Ÿฌ๊ฐ€ ์ƒ๊ธฐ๋ฉด 2๋ฒˆ์งธ apiํ•œํ…Œ ์—๋Ÿฌ๋ฅผ ํ† ์Šคํ•ด์ฃผ๊ธฐ๋งŒ ํ•œ๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ 2๋ฒˆ์งธ api๋Š” 1๋ฒˆ์งธ api ํ˜ธ์ถœ์‹œ ์‹คํŒจ ์‘๋‹ต์„ ๋ฐ›์€ ๊ฒฝ์šฐ์—๋งŒ ์—๋Ÿฌ๋ฅผ ๋ฐ›์•„์„œ 2๋ฒˆ์งธ api์˜ ๋กœ์ง์„ ์‹คํ–‰ํ•œ๋‹ค.

 

1๋ฒˆ์งธ api ๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ์ผ์น˜์—ฌ๋ถ€ ํ™•์ธ

const checkCurrentPasswordPromise = async () => {
try {
await checkCurrentPassword(passwordInputValue).unwrap();
} catch {
//2๋ฒˆ์งธ api๋กœ ์—๋Ÿฌ๋ฅผ ํ† ์Šคํ•˜๋„๋ก ์—๋Ÿฌ์ฒ˜๋ฆฌ
}
};

 

2๋ฒˆ์งธ api ๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ

const updatePasswordPromise = async () => {
try {
await updatePasswordQuery(passwordInputValue).unwrap();
//๋น„๋ฐ€๋ฒˆํ˜ธ ์—…๋ฐ์ดํŠธ ๋กœ์ง
} catch {
toast.error('๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์‹คํŒจ. ๋‹ค์‹œ ์‹œ๋„ํ•ด ์ฃผ์„ธ์š”');
}
};

 

api ํ˜ธ์ถœ ์‚ฌ์šฉ 

const handleComplete = () => {
//๊ธฐ์กด ๋น„๋ฐ€๋ฒˆํ˜ธ์™€ ๊ฐ™์€์ง€ ํ™•์ธ
checkCurrentPasswordPromise().catch(() => {
//๋น„๋ฐ€๋ฒˆํ˜ธ ๋ณ€๊ฒฝ ์„œ๋ฒ„์— ์š”์ฒญ
void updatePasswordPromise();
});
};

 

 

์—ฌ๊ธฐ์„œ 1๋ฒˆ์งธ api์˜ ์—๋Ÿฌ์ฒ˜๋ฆฌ ์ค‘์—์„œ ํ—ท๊ฐˆ๋ ธ๋˜ ๋ถ€๋ถ„์ด ์žˆ๋‹ค. 

    catch {
      //2๋ฒˆ์งธ api๋กœ ์—๋Ÿฌ๋ฅผ ํ† ์Šคํ•˜๋„๋ก ์—๋Ÿฌ์ฒ˜๋ฆฌ
    }

 

catch (err) {} vs catch {}

catch (err) {} 

catch (err) {
throw err
}

 

ํ”„๋ผ๋ฏธ์Šค์—์„œ ๋ฐ˜ํ™˜๋œ (์„œ๋ฒ„์—์„œ ์‘๋‹ต์œผ๋กœ ์ฃผ๋Š”) ์—๋Ÿฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

 

์„œ๋ฒ„์—์„œ ์ฃผ๋Š” ์—๋Ÿฌ ๋ฉ”์‹œ์ง€๊ฐ€ ๊ทธ๋Œ€๋กœ ์ฐํžˆ๋Š” ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

 

catch {}

catch {
throw new Error()
}

 

๋ฐ˜๋ฉด์—, catch์˜ exceptionVar ์— ์•„๋ฌด๋Ÿฐ ์ธ์ž๋„ ์ฃผ์ง€์•Š๊ณ  Error ์ƒ์„ฑ์ž๋ฅผ ๋งŒ๋“ค๋ฉด, javascript ์ž์ฒด์˜ ์‚ฌ์šฉ์ž๊ฐ€ ์ •์˜ํ•œ ์—๋Ÿฌ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง„๋‹ค.

 

 

 

throw error vs return error

throw error

catch (err) {
throw err;
}

 

throw ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด, ์ •์ƒ์ ์ธ ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ฐฉํ•ดํ•ด์„œ ์—๋Ÿฌ๋ฅผ ๋˜์ง€๋Š” ๊ฒƒ์ด๋‹ค. ๋˜์ ธ์ง„ ์—๋Ÿฌ๋Š” call stack์— ๋˜์ ธ์ง€๊ณ , ์—๋Ÿฌ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ์ชฝ์—์„œ ์—๋Ÿฌ๊ฐ€ ์žกํžˆ์ง€ ์•Š์œผ๋ฉด ํ”„๋กœ๊ทธ๋žจ์ด ์ข…๋ฃŒ๋œ๋‹ค. 

 

return error

catch (err) {
return err;
}

 

๋ฐ˜๋ฉด์— ์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋Š” ์ฝ˜์†”์—๋Š” ์ž˜ ์ฐํžŒ๋‹ค. 

 

 

๊ทธ๋ ‡์ง€๋งŒ 1๋ฒˆ์งธ api๋ฅผ ํ˜ธ์ถœํ•ด์„œ ์‚ฌ์šฉํ•˜๋Š” ์•„๋ž˜ ๊ตฌ๋ฌธ์—์„œ catch ์ ˆ์— ์žกํžˆ์ง€ ์•Š์•˜๋‹ค.

์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•˜๋ฉด 2๋ฒˆ์งธ api ํ˜ธ์ถœ๋กœ ์—๋Ÿฌ๊ฐ€ ํ† ์Šค๊ฐ€ ์•ˆ๋˜๊ณ  1๋ฒˆ์งธ ํ˜ธ์ถœ์—์„œ ๊ทธ๋ƒฅ ์—๋Ÿฌ๋งŒ ๋ฐ˜ํ™˜ํ•˜๋ฉด์„œ ์‹คํ–‰์ด ๋๋‚œ๋‹ค. 

 

checkCurrentPasswordPromise().catch(() => {
}

 

์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฑด ๋‹จ์ˆœํžˆ value๋กœ์„œ ์—๋Ÿฌ๋ฅผ ๋ฆฌํ„ดํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ํ˜ธ์ถœํ•˜๋Š” ํ•จ์ˆ˜๋Š” ๊ทธ ์—๋Ÿฌ๋ฅผ return value๋กœ ๋ฐ›๋Š” ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๋ฆฌํ„ดํ•œ ์—๋Ÿฌ๋ฅผ ๊ฐ€์ ธ๋‹ค ์“ฐ๊ณ  ์‹ถ์œผ๋ฉด then ์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์•ผ์ง€ ๋ฐ˜ํ™˜๋ฐ›์€ ์—๋Ÿฌ๋ฅผ ํ•ธ๋“ค๋งํ•  ์ˆ˜๊ฐ€ ์žˆ๋‹ค. 

 

checkCurrentPasswordPromise().then((res) => {
console.log(res, 'res๋Š”?')
}

 

๋ฆฌํ„ด๋ฐ›์€ ์—๋Ÿฌ๋Š” ์œ„์™€ ๊ฐ™์ด then์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋ฉด ์•„๋ž˜์ฒ˜๋Ÿผ ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์—๋Ÿฌ๊ฐ€ ์ž˜ ๋‚˜์˜จ๋‹ค. 

 

 

 

๊ฒฐ๋ก ์ ์œผ๋กœ, ์„œ๋ฒ„์—์„œ ๋ฐ›์€ ์—๋Ÿฌ๋ฅผ ๋‹ค์Œ api๋กœ ํ† ์Šคํ•˜๋Š”๊ฒŒ ์ฃผ๋œ ๋ชฉ์ ์ด๋‹ˆ catch (err) ๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์„œ๋ฒ„ ์‘๋‹ต ์—๋Ÿฌ๋ฅผ ๊ทธ๋Œ€๋กœ ๋ฐ›๊ณ , 1๋ฒˆ์งธ์—api์—์„œ ์—๋Ÿฌ๊ฐ€ ๋˜์ ธ์ง€๋ฉด 2๋ฒˆ์งธ api์—์„œ ์›ํ•˜๋Š” ๋กœ์ง์„ ์‹คํ–‰ํ•˜๋„๋ก ํ•˜๊ณ  ์‹ถ์œผ๋‹ˆ throw err๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๋ฆฌํŒฉํ† ๋ง ํ–ˆ๋‹ค.

 

const checkCurrentPasswordPromise = async () => {
try {
await checkCurrentPassword(passwordInputValue).unwrap();
} catch (err) {
//2๋ฒˆ์งธ api๋กœ ์—๋Ÿฌ๋ฅผ ํ† ์Šคํ•˜๋„๋ก ์—๋Ÿฌ์ฒ˜๋ฆฌ
throw err;
}
};

 

 

๋

'JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

js get object values from string path  (0) 2025.05.26
JSON.stringify() | JSON.parse() | json()  (3) 2024.09.19
TypeScript index signature ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ณ  (0) 2023.09.08
JS ๋ฐฐ์—ด ๊ฐ์ฒด์š”์†Œ ์ˆ˜์ • immutable, mutable  (0) 2023.06.26
JS parseInt() vs Number()  (0) 2022.11.13
  1. ์ƒํ™ฉ
  2. ๋ฆฌํŒฉํ† ๋ง
  3. catch (err) {} vs catch {}
  4. throw error vs return error
'JavaScript' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • js get object values from string path
  • JSON.stringify() | JSON.parse() | json()
  • TypeScript index signature ์ธ๋ฑ์Šค ์‹œ๊ทธ๋‹ˆ์ณ
  • JS ๋ฐฐ์—ด ๊ฐ์ฒด์š”์†Œ ์ˆ˜์ • immutable, mutable
hana1203
hana1203
hana1203
hana's lab ๐ŸŒฑ
hana1203
  • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (95)
    • React (38)
    • JavaScript (7)
    • Firebase (4)
    • Google Cloud Platform (6)
    • Flutter (3)
    • Python (7)
    • Computer Science (6)
    • Problem Solving (3)
    • Git (5)
    • ํšŒ๊ณ  (10)
    • Etc (3)

๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

  • ํ™ˆ

๊ณต์ง€์‚ฌํ•ญ

์ „์ฒด
์˜ค๋Š˜
์–ด์ œ

์ธ๊ธฐ ๊ธ€

ํƒœ๊ทธ

  • ํ‹ฐ์Šคํ† ๋ฆฌ์ฑŒ๋ฆฐ์ง€
  • ์˜ค๋ธ”์™„

์ตœ๊ทผ ๊ธ€

์ตœ๊ทผ ๋Œ“๊ธ€

hELLO ยท Designed By ์ •์ƒ์šฐ.v4.2.2
hana1203
api ์ˆœ์ฐจ์  ์‹คํ–‰ | catch (err) vs catch | throw error vs return error
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”

๋‹จ์ถ•ํ‚ค

๋‚ด ๋ธ”๋กœ๊ทธ

๋‚ด ๋ธ”๋กœ๊ทธ - ๊ด€๋ฆฌ์ž ํ™ˆ ์ „ํ™˜
Q
Q
์ƒˆ ๊ธ€ ์“ฐ๊ธฐ
W
W

๋ธ”๋กœ๊ทธ ๊ฒŒ์‹œ๊ธ€

๊ธ€ ์ˆ˜์ • (๊ถŒํ•œ ์žˆ๋Š” ๊ฒฝ์šฐ)
E
E
๋Œ“๊ธ€ ์˜์—ญ์œผ๋กœ ์ด๋™
C
C

๋ชจ๋“  ์˜์—ญ

์ด ํŽ˜์ด์ง€์˜ URL ๋ณต์‚ฌ
S
S
๋งจ ์œ„๋กœ ์ด๋™
T
T
ํ‹ฐ์Šคํ† ๋ฆฌ ํ™ˆ ์ด๋™
H
H
๋‹จ์ถ•ํ‚ค ์•ˆ๋‚ด
Shift + /
โ‡ง + /

* ๋‹จ์ถ•ํ‚ค๋Š” ํ•œ๊ธ€/์˜๋ฌธ ๋Œ€์†Œ๋ฌธ์ž๋กœ ์ด์šฉ ๊ฐ€๋Šฅํ•˜๋ฉฐ, ํ‹ฐ์Šคํ† ๋ฆฌ ๊ธฐ๋ณธ ๋„๋ฉ”์ธ์—์„œ๋งŒ ๋™์ž‘ํ•ฉ๋‹ˆ๋‹ค.