본문 바로가기

카테고리 없음

Node js 비동기 [promise, async await]

자바스크립트는 싱글스레드라 콜스택이 하나라서 한번에 하나의 작업만 가능하다 그런데 Node js의 비동기를 사용하면 임의의 순서로 또는 동시에 작업을 실행할수 있다.

 

 

비동기 중에서 가독성이 좋지 못한 콜백함수를 대체하려고 나온게 promise함수이다 

function getResult(user) {
	return new Promise((resolve, reject) => {
		resolve(`success register ${user.name}`);
});
}

 

resolve(성공)

reject(실패) 

 

 

 

promise의 단점은 프로미스 성공 실패처리 함수를 둘다 사용할 수 있다. 그리고 then()과 catch()함수를 연결하는 체이닝 방식(함수를 연결해서 계속 호출하는 방식)을 사용해서 로직이 길어져서 복잡해질수 있고 예외처리까지 해야되는 상황이면 더욱 힘들어 질 수 있다..

function myWork(work) {
  return new Promise((resolve, reject) => {
    if (work === "done") {
      resolve("게임 가능");
    } else {
      reject(new Error("게임 불가능"));
    }
  });
}

myWork("done").then(
  function (value) {
    console.log(value);
  },
  function (err) {
    console.log(err);
  },
);

myWork("doing")
  .then(function (value) {
    console.log(value);
  })
  .catch(function (err) {
    console.log(err);
  });

 

 

 

 

promise의 단점을 보완하고 가독성 높은 비동기중에 async await이 있다. 나중에 웹애플리케이션을 만들때 대부분 async await을 사용해  많이들 쓴다. async가 붙은 함수는 프로미스를 반환하고 await은 기다린다는 의미여서 성공 또는 실패로 Promise객체의 실행이 완료되기를 기다린다.

function waitOneSecond(msg) {
  // setTimeOut()에는 반환값이 없기 때문에 Promise객체를 직접생성
  return new Promise((resolve, _) => {
    setTimeout(() => resolve(`${msg}`), 1000);
  })
}


async function countOneToTen() {
  for (let x of [...Array(10).keys()]) {
    // waitOneSecond 함수는 1초대기하고 메시지를 출력하는 함수 
    let result = await waitOneSecond(`${x+1}초 대기중...`);
    console.log(result)
  }
  console.log("완료");
}

countOneToTen();

1초부터 ~ 10초후 완료까지 콘솔창에 출력된다.

 

 

 

https://www.yes24.com/Product/Goods/118379776

 

Node.js 백엔드 개발자 되기 - 예스24

- 자바스크립트 Node.js 백엔드 개발자가 되고 싶다면- HTML/CSS/자바스크립트 그다음에 꼭 보세요실력을 갖춘 개발자로 성장하려면 시작이 중요합니다. 그래서 이 책은 무엇부터 익혀야 하는지 막

www.yes24.com