써치킴의 우당탕탕 개발 블로그

[Vue.js][Ch4][영화검색 사이트] 비동기 - API 비동기 처리 연습 본문

완벽하게 Vue.js

[Vue.js][Ch4][영화검색 사이트] 비동기 - API 비동기 처리 연습

써치킴 2022. 4. 25. 04:11

1. 구글에 axios cdn 검색 > https://cdnjs.com/libraries/axios 이동 > 스크립트 태그 복사

<script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.26.1/axios.min.js" integrity="sha512-bPh3uwgU5qEMipS/VOmRqynnMXGGSRv+72H/N260MQeXZIK4PG48401Bsby9Nq5P5fz7hy5UGNmC/W1Z51h2GQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>

2. index.html에 붙여넣기

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.26.1/axios.min.js" integrity="sha512-bPh3uwgU5qEMipS/VOmRqynnMXGGSRv+72H/N260MQeXZIK4PG48401Bsby9Nq5P5fz7hy5UGNmC/W1Z51h2GQ==" crossorigin="anonymous" referrerpolicy="no-referrer"></script>
  <script src="./main.js" ></script> 
</head>
<body>
  
</body>
</html>

3. main.js에서 영화정보를 가져오는 코드 구현

function fetchMovies(title) {
  const OMDB_API_KEU = '7035c60c';
  return new Promise(async (resolve, reject) => {
    /* await 키워드를 붙여서 요청에 대한 응답을 기다림
    *  => await를 사용하는 함수에 async를 붙여줘야함 
    *  => callback 함수에서 사용하고 있으므로 callback 함수 앞에 async를 붙여줌
    */ 
    const res = await axios.get(`https://omdbapi.com?apikey=${OMDB_API_KEU}&s=${title}`);
    resolve(res);     // 응답받은 데이터를 resolve로 반환
  });
}

async function test() {
  // async, await를 사용하지 않으면 res에 promise를 반환하는데
  // async, await를 사용하여 promise를 기다리게하고
  // 영화정보를 갖고있는 데이터가 출력됨
  const res = await fetchMovies('frozen'); 
   
}

test();
  •  await를 사용하는 함수는 async를 붙여줘야한다.

유효하지 않은 OMDB KEY를 사용하면 401 에러가 발생한다.

try catch문을 사용한다.

function fetchMovies(title) {
  /* 대기(pending): 이행하지도, 거부하지도 않은 초기 상태. */
  const OMDB_API_KEU = '7035c60c123';
  return new Promise(async (resolve, reject) => {
    /* await 키워드를 붙여서 요청에 대한 응답을 기다림
    *  => await를 사용하는 함수에 async를 붙여줘야함 
    *  => callback 함수에서 사용하고 있으므로 callback 함수 앞에 async를 붙여줌
    */ 
   try {
      const res = await axios.get(`https://omdbapi.com?apikey=${OMDB_API_KEU}&s=${title}`);
      /* 이행(fulfilled): 연산이 성공적으로 완료됨. */
      resolve(res);     // 응답받은 데이터를 resolve로 반환
    } catch (error) {
      console.log('error', error.message);
      /* 거부(rejected): 연산이 실패함. */
      reject('SEARCHKIM??');    // 메시지 반환
    }
  });
}

async function test() {
  try {
    // async, await를 사용하지 않으면 res에 promise를 반환하는데
    // async, await를 사용하여 promise를 기다리게하고
    // 영화정보를 갖고있는 데이터가 출력됨
    const res = await fetchMovies('frozen'); 
    console.log(res);
  } catch (error) {
    console.log(error);
  }
}

function hello() {
  fetchMovies('jobs')
    .then(res => console.log(res))
    .catch(msg => console.log(msg))
    
}

test();
hello();

  • 대기(pending): 이행하지도, 거부하지도 않은 초기 상태.
    • 함수가 실행되기 전 부분
  • 이행(fulfilled): 연산이 성공적으로 완료됨.
    • resolve 파라미터가 실행되는 부분
  • 거부(rejected): 연산이 실패함.
    • reject 파라미터가 실행되는 부분
Comments