[서버 week2-1] 비동기 처리 방식 - 콜백함수, Promise, async/await

SH·2022년 4월 11일
0

서버 세미나

목록 보기
3/14

Node.js는 싱글 스레드이기 때문에 event 기반 비동기 방식으로 일을 처리한다. event는 callback function, Promise, Async/Await 세 가지 방식으로 처리할 수 있다


비동기 처리 방식

callback

  1. Callback function 나중에(back) 호출해달라(call)고 시스템에게 요청하는 함수

어떤 이벤트 발생 시, 특정 시점에 도달했을 때 호출되는 함수로서 다른 함수의 인자로 사용된다

setTimeout(():void=>{
	console.log('3초 경과');
}, 3000);

setTimeout()에 인자로 람다 함수와 3000을 넣어준 걸 확인할 수 있다.

문제는 콜백 지옥에 빠질 수 있다는 점.. 콜백 함수가 많아지면 그만큼 가독성이 떨어진다 그래서 나온게 2번

Promise

  1. Promise - 자바스크립트에서 제공하는, 비동기를 간편하게 해결할 수 있도록 하는 오브젝트
    ES2015부터 Node, JS API가 이 Promise로 재구성되었다

Promise는 3가지 상태(status)가 있다

  1. Pending 대기. 비동기 처리가 완료되지 않음. resolve()나 reject() 아무것도 호출 안한 상태
  2. Fullfiled 이행. 비동기 처리가 완료되어서 Promise가 반환된다
  3. Rejected 실패. 실패하거나 오류가 난다.

Promise의 생성자에 execute라는 콜백함수를 전달해주어야 하고, execute안에는 또 resolve 콜백함수와 reject 콜백함수를 전달할 수 있다


// 1. Producer

const promise = new Promise((reslove, rejcct) => {
    // 네트워크 통신이라든지 파일 읽기라든지 뭔 일 수행
    setTimeout(()=>{
        reslove('성공');
    }, 2000);
});

// consumer
promise
    .then(value=> { // reslove에서 인자로 넣어준 '성공'이 value로 들어옴
        console.log(`${value}`);
    })
    .catch(error => {
        console.log(`${error}`)
    });

promise를 이해하기 위해서는 producer 개념과 consumer 개념을 구분해주어야 한다

producer - 데이터를 제공하는 사람
consumer - 데이터를 받는 사람


정리
  1. new Promise로 Promise 객체가 생성되자마자 execute 함수가 실행된다.
  2. 정상적으로 실행되면 resolve() 호출, 오료 발생하면 reject() 호출
  3. .then으로 데이터를 받고, .catch로 에러를 받는다. .then이나 .catch의 매개변수로는 promise에서 넘겨준 값이 올 수도, promise 객체 그 자체가 올 수도 있다.

19분 17초 참고. promise chaining에 대한 예시가 자세히 나와있다. https://www.youtube.com/watch?v=JB_yU6Oe2eE&list=PLv2d7VI9OotTVOL4QmPfvJWPJvkmv6h-2&index=12

async / await

Promise를 보다 쉽게 사용할 수 있도록 돕는 애들이 async / await이다. 얘네들을 사용하면 비동기 처리가 동기 처리처럼 보임

async - 암묵적으로 promise를 반환

// 함수 선언식
async function 함수이름 (){
}

// 함수 표현식
const 변수이름 = async () => {
}

그냥 일반적인 함수 앞에 async 키워드가 붙은 걸로 이해하면 됨

await - Promise를 기다린다. async가 정의된 내부에서만 사용한다

profile
블로그 정리안하는 J개발자

0개의 댓글

관련 채용 정보