본문 바로가기
Do it Node.js/EJS BackEnd

2. 자바스크립트 비동기 처리

by 갱생angel 2024. 2. 23.

비동기 처리 : 시간이 걸리는 함수와 빨리 처리할 수 있는 함수가 뒤섞여 있을 때, 함수들을 원하는 처리 순서에 맞게 프로그래밍하는 것

 

ch02 - <sync.js> 

※setTimeout() : 특정한 시간이 지난 후에 실행하는 함수

  -밀리초를 0으로 설정해도 함수 자체에 지연 시간이 포함

const displayA = () => console.log("A");

const displayB = (callback) => {
  setTimeout(() => {
    console.log("B");
    callback();
  }, 2000); //2초 후에 displayB 함수 실행
};

const displayC = () => console.log("C");

displayA();
displayB(displayC); //displayB 함수를 실행한 후 displayC 함수를 실행
>> node sync


콜백(callback) 함수 : 다른 함수의 매개변수로 사용하는 함수

 

ch02 - <callback.js>

const order = (coffee) => {
  console.log(`${coffee} 주문 접수`);
  setTimeout(() => {
    complete(coffee);
  }, 3000); //3초 뒤에 complete 함수 실행
};

const complete = (coffee) => console.log(`${coffee} 완료!`);

order("아메리카노");
>> node callback

 

콜백 지옥 : 콜백 함수 안에 다른 콜백 함수가 연속으로 있는 경우, 콜백이 계속 반복되는 상태


프라미스(promise) : 콜백 지옥이 생기지 않도록, 처리에 성공했을 때와 실패했을 때의 반환 결과를 미리 약속

 

ch02 - <promise.js>

  -new Promise() : 프라미스를 선언

  -.then() : 처리에 성공했을 시 실행

  -.catch() : 처리에 실패했을 시 실행

const likePizza = true;

const pizza = new Promise((yes, no) => { //프라미스 선언
  if (likePizza) { //true
    yes("피자를 주문합니다.");
  } else { //false
    no("피자를 주문하지 않습니다");
  }
});

pizza.then((yes) => console.log(yes)).catch((no) => console.log(no)); //프라미스 체이닝
      //처리에 성공했을 시              //처리에 실패했을 시
>> node promise

 

프라미스 체이닝 : then, catch 함수를 한 줄로 쓰는 것


async / await : 프라미스 체이닝으로 인해 코드가 복잡해질 것을 방지

  -async : 함수 앞에 선언하는 명령어

  -await : 비동기 처리를 진행하는 명령어로, async 안에서만 사용 가능

 

ch02 - <await.js>

  -fetch() : 네트워크를 통해 서버에서 자료, 데이터를 가져오는 함수

  -.json() : 가져온 자료, 데이터를 프로그램에서 사용할 수 있는 객체로 변환하는 함수

async function init() {
  const response = await fetch("https://jsonplaceholder.typicode.com/users"); //서버에서 자료 가져옴
  const users = await response.json(); //자료를 프로그램에서 사용할 수 있는 객체로 변환

  console.log(users);
}

init();
>> node await

'Do it Node.js > EJS BackEnd' 카테고리의 다른 글

6. 버퍼, 스트림, 파이프  (0) 2024.02.28
5. fs 모듈  (0) 2024.02.27
4. path 모듈  (0) 2024.02.25
3. 모듈 시스템  (0) 2024.02.24
1. node.js, npm  (0) 2024.02.22