Node.js

[NodeJS] async 와 await

SongMinu 2021. 4. 3. 15:17
728x90
길벗 출판사의 Node.js 교과서 개정2판에서 설명해준 내용 중 일부입니다.

노드 7.6 버전부터 지원되는 기능이다.

ES2017에서 추가되었으며, 알아두면 정말 편리한 기능이다.

특히 노드처럼 비동기 위주로 프로그래밍을 해야   도움이 많이 된다.

프로미스가 콜백 지옥을 해결했다지만, 여전히 then catch 계속 반복되기는 한다.

async/await 문법은 프로미스를 사용한 코드를    깔끔하게 해준다.

 

책도 읽고 소스도 따라 쳐보고, 구글링해서 설명과 소스를 봤었는데

처음에 이해하는데 좀 오래걸렸었다.

 

const time = 1;
function sleep (t) { //슬립용
  return new Promise( (resolve, reject) => {
	const time = t * 1000;
	setTimeout(resolve, time);
  })
}

//프로미스를 이용해 반환
function test () {
  return new Promise( (resolve, reject) => {
	setTimeout(() => {
	  resolve(console.log('222'));
	}, 100);
  })
}

//프로미스없이 그냥 반환
function test2 () {
  setTimeout( () => {
	console.log('22222222');
  }, 100)
}

//확인
async function run () {
  console.log('------ test 1 ------');
  console.log('1');
  test();
  console.log('3');
  /** log...
   * 1
   * 3
   * 222
   * 프로미스를 사용해서 비동기를 해결하려면 async/await을 같이 사용해야함
   */
   
  await sleep(time);
  
  console.log('------ test 2 ------');
  console.log('1');
  await test();
  console.log('3');
  /** log...
   * 1
   * 222
   * 3
   * 프로미스를 통해 반환하기 때문에 async/await을 사용하면 순서대로 처리됨
   */
   
  await sleep(time);
  
  console.log('------ test 3 ------');
  console.log('1');
  test2();
  console.log('3');
  /** log...
   * 1
   * 3
   * 22222222
   * 비동기 그자체...
   */
   
  await sleep(time);
  
  console.log('------ test 4 ------');
  console.log('1');
  await test2();
  console.log('3');
  /** log...
   * 1
   * 3
   * 22222222
   * promise가 아니면 await을 써도 의미가 없음
   */
   
  await sleep(time);
}
run();

위 소스 결과

async/awiat에 대해 공부했을 때 자꾸 헷갈려서 확인차 작성해봤던 소스

 

 

반응형