Consideration of the code
Consideration of the code_API적용에 대한 코드
k0z
2023. 10. 20. 16:24
# Async/Await 사용 방식
- 가독성과 유지보수가 중요한 경우: 코드가 더 명확하게 보이며, 에러 처리가 직관적입니다.
- 동기적인 코드처럼 작성하고 싶을 때: `async/await`는 코드가 동기적으로 실행되는 것처럼 보이게 해줍니다.
- 복잡하거나 가독성이 중요한 프로젝트에서는 `async/await`를 사용하는 것을 권장합니다.
- 간단한 작업이나 코드가 간결하게 유지될 때에는 Promise체인을 고려할 수 있습니다.
***예시)
async function fetchAndDisplayMovies() {
try {
const data = await fetchMovies();
displayMovies(data);
} catch (error) {
handleError(error);
}
}
# Promise 체인 사용 방식
- 간단한 비동기 작업의 경우: 코드가 간결하고 작업이 단순한 경우, `then( )` 메소드를 사용하여 Promise 체인을 작업할 할 수 있습니다.
- 선호도나 코드 길이에 따라: 개발자가 Promise 체인을 선호하거나 코드가 길어지지 않을 경우에 선택할 수 있습니다.
***예시)
function fetchAndDisplayMovies() {
fetchMovies()
.then(data => displayMovies(data))
.catch(error => handleError(error));
}
## 개인 프로젝트 작업 중 오픈 API 적용에 관하여
# 이전에 완성한 코드 _ Async/Await 사용
const api_key = `8206b490bb08\914d`;
const apiUrl = 'https://api.themoviedb.org/3/movie/top_rated?language=ko-KR&page=1&api_key=' + api_key;
const fetchMovies = async () => {
try {
const response = await fetch(apiUrl, {
method: 'GET',
headers: {
accept: 'application/json'
}
});
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.status}`);
}
const data = await response.json();
const movieContainer = document.getElementById('movie-card-container');
data.results.forEach(movie => {
const card = document.createElement('div');
card.classList.add('movie-card');
card.innerHTML = `
<img src="https://image.tmdb.org/t/p/w500${movie.poster_path}" alt="${movie.title}" />
<h2>${movie.title}</h2>
<p>${movie.overview}</p>
<p>Rating: ${movie.vote_average}</p>`;
card.setAttribute('data-movie-id', movie.id);
card.addEventListener('click', () => {
const movieId = card.getAttribute('data-movie-id');
alert(`Clicked on movie with ID: ${movieId}`);
});
movieContainer.appendChild(card);
});
} catch (error) {
console.error(error);
}
};
fetchMovies();
# 이후에 완성한 코드 _ Promise 체인 사용
const api_key = `8206b490bb08\914d`;
const apiUrl = 'https://api.themoviedb.org/3/movie/top_rated?language=ko-KR&page=1&api_key=' + api_key;
const fetchMovies = () => {
fetch(apiUrl, {
method: 'GET',
headers: {
accept: 'application/json',
},
})
.then((response) => {
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.status}`);
}
return response.json();
})
.then((data) => {
const movieContainer = document.getElementById('movie-card-container');
data.results.forEach((movie) => {
const card = document.createElement('div');
card.classList.add('movie-card');
card.innerHTML = `
<img src="https://image.tmdb.org/t/p/w500${movie.poster_path}" alt="${movie.title}" />
<h2>${movie.title}</h2>
<p>${movie.overview}</p>
<p>Rating: ${movie.vote_average}</p>`;
card.setAttribute('data-movie-id', movie.id);
card.addEventListener('click', () => {
const movieId = card.getAttribute('data-movie-id');
alert(`Clicked on movie with ID: ${movieId}`);
});
movieContainer.appendChild(card);
});
})
.catch((error) => {
console.error(error);
});
};
fetchMovies();
# 이전 코드와 현재 코드의 차이점
// 이전 코드 (async/await 사용)
const fetchMovies = async () => {
try {
// fetch 메소드를 await으로 동기적으로 처리
const response = await fetch(apiUrl, {
method: 'GET',
headers: {
accept: 'application/json'
}
});
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.status}`);
}
// response.json() 메소드를 await으로 동기적으로 처리
const data = await response.json();
// 데이터를 처리하고 DOM에 추가
} catch (error) {
console.error(error);
}
};
// 현재 코드 (async/await 미사용)
const fetchMovies = () => {
return fetch(apiUrl, {
method: 'GET',
headers: {
accept: 'application/json',
},
})
.then((response) => {
// fetch 메소드의 Promise를 사용하여 비동기 처리
if (!response.ok) {
throw new Error(`Network response was not ok: ${response.status}`);
}
return response.json(); // response.json() 역시 Promise를 반환
})
.then((data) => {
// 데이터를 처리하고 DOM에 추가
})
.catch((error) => {
console.error(error);
});
};
### 두 코드의 주요 차이점
1. async/await vs. Promise 체인:
- 이전 코드에서는 async/await를 사용하여 비동기 작업을 동기적으로 처리했습니다.
- 현재 코드에서는 Promise 체인을 사용하여 비동기 작업을 처리했습니다
2. .then() 메소드:
- 현재 코드에서 .then() 메소드를 사용하여 각각의 비동기 단계를 연결했습니다. 이는 Promise를 연결하는 방식으로 비동기 코드를 작성하는 전통적인 방법입니다.
3. 에러 처리:
- 이전 코드에서는 try...catch를 사용하여 에러를 처리했고, catch 블록에서 에러를 콘솔에 출력했습니다.
- 현재 코드에서는 .catch() 메소드를 사용하여 에러를 처리하고 콘솔에 출력했습니다.