비동기 통신 사용할 때 2가지 처리 방식(Promise, async, await)




비동기 통신 방식이란?



비동기 통신 종류


JavaScript
fetch('/data')
    .then(response => response.json())
    .then(data => console.log(data))
    .catch(error => console.error(error));


axios.get('/data')
    .then(response => console.log(response.data))
    .catch(error => console.error(error));


$.ajax({
  url : "",
  type : "",
  data : "",
  dataType : "json",
  success : function(res){
  // 통신 성공시 실행
  },
  error : function(error){
  // 통신 실패시 실행  
  }
})




Promise 함수


JavaScript
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Promise and AJAX Example</title>
    <!-- jQuery 라이브러리 추가 -->
    <script src="https://code.jquery.com/jquery-3.6.4.min.js"></script>
</head>
<body>

<button id="loadDataBtn">Load Data</button>
<div id="result"></div>

<script>
// AJAX 요청을 Promise로 감싸는 함수
function fetchData() {
    return new Promise((resolve, reject) => {
        $.ajax({
            url: 'https://url',
            type: 'GET',
            dataType: 'json',
            success: function(response) {
                resolve(response);
            },
            error: function(xhr, status, error) {
                reject(error);
            }
        });
    });
}

fetchData().then(response => {
    // 성공적으로 데이터를 받아왔을 때의 처리
    console.log(response);
}).catch(error => {
    // 오류 발생 시의 처리
    console.error('Error:', error);
});



async, await


JSX
import React, { useState, useEffect } from 'react';
import axios from 'axios';

const App = () => {
  const [data, setData] = useState(null);
  const [error, setError] = useState(null);

  const fetchData = async () => {
    try {
      const response = await axios.get('https://url');
      setData(response.data);
    } catch (error) {
      setError(error.message);
    }
  };

  useEffect(() => {
    fetchData();
  }, []); // 빈 배열은 컴포넌트가 마운트될 때 한 번만 실행

  return (
    <div>
      <h1>React Async/Await with Axios</h1>
      {error && <p>Error: {error}</p>}
      {data && (
        <div>
          <h2>{data.title}</h2>
          <p>{data.body}</p>
        </div>
      )}
    </div>
  );
};

export default App;