ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Consideration of the code_API적용에 대한 코드
    Consideration of the code 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() 메소드를 사용하여 에러를 처리하고 콘솔에 출력했습니다.

     

Designed by Tistory.