TIL(Today I Learned)

3월 1일(수)

공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.

Callback vs Promise vs async/await

  • 비동기 작업의 결과를 처리해주기 위해서 Callback이 사용되었다.
  • Callback은 nested 될 경우, 코드 가독성이 떨어지고 로직이 복잡해진다.
  • 그래서 이를 보완하기 위해 Promise라는 개념이 생겨났다.
  • 비동기 함수에서 Promise를 반환하고, Promise는 비동기 작업의 처리 상태를 갖고 있다.
  • 또한 then을 통해 비동기 작업이 완료된 이후의 처리를 할 수 있고, catch를 통해 비동기 작업의 예외처리가 가능하다.
  • then과 catch를 chaining 함으로써 Callback이 nested되는 복잡한 경우를 방지할 수 있다.
  • 그리고 Promise를 더 간단하게 표현하기 위해서 async/await라는 키워드가 생겼다.
  • async 키워드는 비동기 함수를 정의하기 위한 키워드이며, Promise를 반환해야한다.
  • await는 비동기 함수의 결과를 기다리기 위한 키워드이다. async 함수안에서만 동작하며, 비동기 함수기 실행되는 앞에 붙어야한다.
  • 예시)
      const asyncFunc = async () => {
          const response = await fetch(resource);
          const data = await response.json();
      }
    
      console.log(1);
      cosole.log(2);
    
      asyncFunc().then(data => console.log(data));
    
      console.log(3);
      console.log(4);
    
      // 실행결과
      // 1
      // 2
      // 3
      // 4
      // data
    

express.json()

  • express.json()은 express에 내장된 기본 middleware 이다.
  • 클라이언트가 json 형식의 request를 받으면 이를 파싱해주기 위해서 express.json()을 use처리 해주어야 한다.
  • 예시)
      const express = require("express");
      const app = express();
    
      app.use(express.json());
    
      app.post('/', function(req, res){
          console.log(req.body); 
          res.send(req.body);
      });
    
      app.listen(3000);
    

참고 및 예시 출처