์ด์์ฌํญ
postTokenQuery(token)
.then((res) => {
console.log(res, '์ฟผ๋ฆฌ res');
if (res.data) {
setTokenInStorage(token);
}
})
.catch(() => toast.error('ํ ํฐ ์๋ฌ ๋ฐ์')); //์๋ฒ ์๋ต ์คํจ์ ์คํ ์๋จ
rtk query ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํ์ฉํด์ ์๋ฒ์ ํต์ ํ๋๋ฐ ์๋ฒ์์ ๋ณด๋ด์ฃผ๋ ์๋ต์ ๋ฐ๋ผ
์ฑ๊ณตํ๋ฉด? .then ์ผ๋ก ํน์ ๋ก์ง์ ์คํํ๊ณ
์คํจํ๋ฉด? .catch ๋ก ํ ์คํธ๋ฅผ ๋์ฐ๋ ๋ก์ง์ด๋ค.
๊ทธ๋ฐ๋ฐ ์๋ฒ์ ์๋ต์ ์คํจํด๋, catch ๋ฌธ์ผ๋ก ๋์ด๊ฐ์ง ์๊ณ , then์์ ๊ฑธ๋ ค res ์๋ต์ ์ฝ์์ ๋์ฐ๋ ์ด์ํ ์ ์ด ๋ฐ๊ฒฌ๋์๋ค.
์ฑ๊ณต์ {data: {…}} ๊ฐ ์ฝ์์ ์ฐํ๊ณ , ์คํจ์ {error: {...}}๊ฐ ์ฝ์์ ์ฐํ๋ ๊ฑธ ํ์ธํ์๋ค.
์์ธ
HTTP requests ๋ฅผ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ํ ์ ์๋๋ก ํ๋ fetchBaseQuery๋ฉ์๋๋ก ๊ธฐ๋ณธ baseQuery๋ฅผ ์ค์ ํ๋๋ฐ, fetchBaseQuery์ ๊ฒฐ๊ณผ๋ก Promise ๊ฒฐ๊ณผ ํ์ ์ ์๋์ ๊ฐ๋ค.
type FetchBaseQueryResult = Promise<
| {
data: any
error?: undefined
meta?: { request: Request; response: Response }
}
| {
error: {
status: number
data: any
}
data?: undefined
meta?: { request: Request; response: Response }
}
>
์์ ๊ฐ์ ํ์ ์ผ๋ก ์ ์๋์ด์๊ธฐ์, api ํธ์ถ์ด ์ฑ๊ณตํ๋ฉด, ์๋ฒ์์ ์ฃผ๋ ์๋ต payload body๊ฐ {data: {…}} ํํ๋ก ์๋ต์ ์ฃผ๋ ๊ฒ์ด์๊ณ
์คํจํ๋ฉด, {error: {…}} ํํ๋ก ์๋ต์ ์ฃผ๋ ๊ฒ์ด์๋ค.
๋ฐ๋ผ์ ์ฟผ๋ฆฌ๋ก ๋ฐ๋ response ํ์ ์ ์ฑ๊ณต SuccessType, ์คํจ ErrorType์ union type์ผ๋ก ์ง์ ํ์ฌ .then() ์ฒด์ธ ๋ด๋ถ์์ ์ฑ๊ณต์? ~~ ์คํจ์? ~~ ๋ฐ์ดํฐ๋ฅผ ์ผ์ผ์ด ํ์ ์ ๋ฐ๋ผ ๋ฐ์์์ผ ํ๋ ๋ฒ๊ฑฐ๋ก์์ด ์์๋ค.
ํด๊ฒฐ
rtk query์ unwrap() ์ด๋ผ๋ ์ฒด์ธ์ ์ฌ์ฉํด์ ์ฑ๊ณต / ์คํจ์ payload๋ฅผ ๋ฐ๋ก ๋ฐ์์ฌ ์ ์๋ค.
postTokenQuery(token)
.unwrap()
.then((res: TokenResponseType) => {
console.log(res, '์ฟผ๋ฆฌ res');
setTokenInStorage(token);
})
.catch(() => toast.error('ํ ํฐ ์๋ฌ ๋ฐ์'));
์ด๋ ๊ฒ ์ ์ด์ฃผ๋ฉด ์๋ฒ ์๋ต ์ฑ๊ณต์ response์ ๋ฐ๋ก ์๋ต payload ๋ฐ๋๊ฐ ๋ด๊ธฐ๊ณ , ์๋ฌ๋ ์์ฐ์ค๋ฝ๊ฒ catch ๋ฌธ์์ ์กํ๋ค.