프로젝트

맛집지도 만들기 - Javscript 비동기 처리

gilola 2025. 1. 22. 16:30

동기/ 비동기란?

동기(syncronous): 코드 한줄씩 실행이 끝난 뒤 다음 코드로 넘어가는 처리 방식

비동기(asyncronous): 코드 실행 후 완료 여부와 관계없이 다음 코드로 넘어가는 처리 방식

 

비동기 방식은 효율적이지만 문제가 발생할 수 있다.

API 요청으로 반환된 값을 반드시 활용해야하는 경우라면 코드의 실행 순서를 보장받아야 함.

 

JS 비동기 처리

1. callback 함수

2. promise 객체

3. async, await

 

Callback 함수 사용: 함수 안에 함수를 넣기

ex)

// 1
console.log("1등!");
// 2
setTimeout(function () {
  console.log("2등!");
  // 3
  setTimeout(function() {
console.log('3등!');
}, 2000);
}, 2000);

=> 함수가 많이 필요한 경우에는 비효율적임

 

Promise 객체: callback함수의 단점을 개선한 방법

대기(promise 객체를 새로 생성한 상태), 이행(resolve 실행. 비동기 로직이 완료), 거부(reject 실행. 비동기 로직 에러) 상태값 존재

ex)

const hi = new Promise((resolve, reject) => {
  // resolve("good");
  reject("fail");
});

hi
.then((res) => console.log(res))
.catch((err) => console.log(err));

 

resolve가 호출 -> 이행상태 -> promise 객체의 then() 메서드 호출

reject가 호출 -> 거부상태 -> promise 객체의 catch() 메서드 호출

 

async, await: promise와 비슷, 사람이 읽기 쉬움

ex) 

async function asyncFunction() {
  console.log("1등");
  await second();
  await third();
}

function second() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("2등");
      resolve();                     // resolve가 호출되야지만 promise의 대기 상태가 끝
    }, 2000);
  });
}

function third() {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      console.log("3등");
      resolve();
    }, 2000);
  });
}

asyncFunction();

'프로젝트' 카테고리의 다른 글

맛집지도 만들기 - mysql  (0) 2025.01.22
맛집지도 만들기 - 서버  (2) 2025.01.22
맛집지도 만들기 - javascript  (1) 2025.01.22
맛집지도 만들기 - client(3)  (1) 2025.01.20
맛집지도 만들기 - client(2)  (0) 2025.01.16