1. Promise


function User(){
 return new Promise((resolve,reject) => {
  return "kim"; // resolve를 사용하지 않음
  })
} 

const user = User();
console.log(user); // Promise {<pending>} , resolve를 사용하지 않았기 때문이다

function User(){
 return new Promise((resolve,reject) => {
  resolve("kim"); // resolve를 사용 
  })
} 

const user = User();
console.log(user); // Promise{<fulfilled> : "kim"}

2. async, await


특징

async-await은 ES8에서 추가된 문법으로 Promise 사용한 비동기 처리를 더욱 손쉽게 하기 위해 나왔다.

(Promise를 간단하게 쓸 수 있는 syntactic sugar)

비동기 처리 방식을 동기 처리처럼 가능하게 해준다. (실제 동기 방식처럼 진행되는게 아니라 코드를 작성하는 방식이 동기방식처럼 보인다는 것이다.)

장점

  1. 코드 가독성: 비동기 코드를 동기적으로 작성할 수 있으므로 코드가 직관적이고 이해하기 쉬워진다.
  2. 오류 처리: try/catch 구문을 사용하여 오류 처리가 간단해지고, 오류가 발생한 경우에도 예외를 쉽게 처리할 수 있다.
  3. 직렬화: await 키워드를 사용하면 코드 실행이 해당 비동기 작업이 완료될 때까지 블로킹되므로, 직렬화된 작업 흐름을 유지하면서 비동기 코드를 동기식으로 작성할 수 있다.

async

async 키워드는 function 앞에 사용한다. function 앞에 async를 붙이면 해당 함수는 항상 프로미스를 반환한다. (프로미스가 아닌 값을 반환하더라도 이행 상태의 프로미스(resolved promise)로 값을 감싸 이행된 프로미스가 반환되도록 한다.)