์ํฉ
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' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
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 |
JS ๊ธฐ์ ๋ฉด์ | const ํค์๋ ๊ฐ์ฒด ๊ฐ ๋ณ๊ฒฝ (0) | 2022.11.11 |