๋ด์ผ๋ฐฐ์์บ ํ
[๊ฐ์ธ๊ณผ์ /TroubleShooting] ์๋ฌ๋ฅผ ๋์ก๋๋ฐ ์ฌ๋ผ์ก์ต๋๋ค..?
Dana10
2025. 1. 15. 15:45
1. ๋ฌธ์ ๋ฐ์
- ์๋ฒ์์ ํต์ ์ ์คํจํ๋ฉด, ์๋ฒ์์ ๋ด๋ ค์ค ๋ฉ์์ง๋ฅผ alert๋ก ๋์ฐ๊ณ ์ถ์
- catch(error)๋ก error๋ฅผ ์ก์์ return ํด์ฃผ๋ฉด alert(error)๋ก ๋์ธ ์ ์๊ฒ ์ง?
- ์ด๋ ํ ๋ฒ ์ผ๋ถ๋ฌ ์๋ฌ๋ฅผ ๋ด๋ณผ๊น -> ์๋์ ์ผ๋ก path๋ฅผ ํ๋ฆฌ๊ฒ ํจ
- ์ ์ ๋ด๊ฐ ๋์ง ์๋ฌ๊ฐ ์๋๋ผ ๋ค๋ฅธ ์ด์ํ ์๋ฌ๊ฐ ๋จ์ง?
<api.js>
const DEFAULT_ERROR_MESSAGE = '์๋ฌ๊ฐ ๋ฐ์ํ์ต๋๋ค.';
const DEFAULT_FETCH_ERROR_MESSAGE = '๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ค์ง ๋ชปํ์ต๋๋ค.';
const options = {
method: 'GET',
headers: {
accept: 'application/json',
Authorization: `Bearer ${API_KEY || PUBLIC_KEY}`
}
}
// ํ์ฌ ์์ ์ค์ธ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ด.
export const getMoviesData = async () => {
try{
const res = await fetch(`${BASE_URL}/movi/now_playing?language=ko-KR&page=1`, options);
if(!res.ok) throw new Error(DEFAULT_FETCH_ERROR_MESSAGE);
const data = await res.json();
return data;
} catch(error) {
return error|| DEFAULT_ERROR_MESSAGE;
}
}
<index.js>
getMovieData(); // ์๋ฒ์์ data๋ฅผ ๋ถ๋ฌ์จ๋ค.
async function getMovieData() {
loading.create();
loading.start();
try{
const data = await getMoviesData();
const { results } = data;
movieData = parseData(results) || [];
renderMoviCard(movieData);
loading.end();
} catch(error) {
console.error(error);
alert(error);
loading.end();
}
};
// ์๋ฒ์์ ๋ฐ์์จ ๋ฐ์ดํฐ์์ ํ์ํ ์์๋ง ๊ณจ๋ผ ์ ์ ํ๋ ํจ์
const parseData = (data) => {
if (!data || data.length === 0) return;
const parsedData = data.map((_data) => {
const { id, title, vote_average, poster_path } = _data;
return { id, title, rate : vote_average.toFixed(1), img :`${IMAGE_BASE_URL}${poster_path}` }
});
return parsedData;
};
getMoivesData์์ fetch ์ดํ์ !res.ok๋ฉด DEFAULT_FETCH_ERROR_MESSAGE๋ฅผ ์๋ฌ๋ก ๋์ง๊ณ catch์์ ๋ฐ๊ฒ ์ง?
๊ทธ๋ผ ๊ทธ๊ฑธ ๊ทธ๋๋ก return ํด์ฃผ๊ณ getMovieData์ catch์์ error๋ก ๋ฐ๊ณ , ๊ทธ๊ฑธ alert๋ก ์ง ~ ํ๊ณ ๋์ฐ๋ฉด ๋๋๋ฐ..
์ ์๋ฌด๊ฒ๋ ์ ๋จ์ง???
2. ์์ธ ์ถ๋ก
- ๊ทธ๋ 404์๋ฌ๊ฐ ๋๋ ๊ฑด ๋๋ ์์ง. ๊ทธ ์๋ฌ๋ฅผ ๋ด๊ฐ ๋์ผ๋๊น !
- ์ด๋ผ..? ์์ธํ ๋ณด๋ ์๋ฌ๊ฐ ์ฐํ ์์น๊ฐ index.js์ console.error(error) ๋ถ๋ถ์ด ์๋๋ผ api.js๋ค?
- ๊ทธ๋ ๋ค๋ฉด ์ index.js์์ ์ฝ์ ์๋ฌ๊ฐ ์ ์ฐํ์ง? catch ๋ฌธ์ ์ ํ๋ค?
- ๋ด๊ฐ returnํ error๋ ๋๋์ฒด ์ด๋๋ก ๊ฐ ๊ฑธ๊น..
- javascript catch ๋ฌธ return.. ๊ตฌ๊ธ๋งํด ๋ณด์
- ์ํ! return์ ๋ชจ๋ ๋ธ๋ก์ ๊ฑฐ์น๊ณ ์ ์ ์ข ๋ฃํ๋ค๋ ์๋ฏธ์ด๊ตฌ๋!! throw๋ ์์ธ๊ฐ ๋ฐ์ํ๋ฉด ๋์ด์ ํ์ฌ ํจ์๋ฅผ ์คํํ์ง ์๊ณ catch ๋ธ๋ก์ผ๋ก ์ ์ด ํ๋ฆ์ด ๋์ด๊ฐ๋๊ตฌ๋!!
- ๊ทธ๋ฌ๋ฉด ๋ด๊ฐ returnํ error๋ ์ ์ ์ข ๋ฃ๋์ด์ ๊ฐ์ด ๋ฐํ๋์๊ฒ ๋ค
- ํด๋น ๊ฐ์ ๋ฐ๋ ๋ถ๋ถ์ด.. index.js์์ getMovieData()์ try๋ฌธ.. data..? data์ ๋ด๊ฒจ์๋ค๊ณ ? ์ฝ์ ์ถ๋ ฅ ๊ณ ๊ณ
์ฐพ์๋ค ๋ด ์๋ฌ.
3. ํด๊ฒฐ ๋ฐฉ์
- error๋ฅผ return์ด ์๋ throw๋ก ๋์ ธ์ catch์์ ๋ฐ์ ์ ์๋๋ก ์ฝ๋๋ฅผ ์์ ํ์.
// ํ์ฌ ์์ ์ค์ธ ์ํ์ ๋ฐ์ดํฐ๋ฅผ ๋ถ๋ฌ์ด.
export const getMoviesData = async () => {
try{
const res = await fetch(`${BASE_URL}/movi/now_playing?language=ko-KR&page=1`, options);
if(!res.ok) throw new Error(DEFAULT_FETCH_ERROR_MESSAGE);
const data = await res.json();
return data;
} catch(error) {
throw error|| DEFAULT_ERROR_MESSAGE;
}
}
4. ๊ฒฐ๊ณผ
์ด์ ์ผ ์ ๋๋ก ์๋ํ๋ค.