[JavaScript] async, await

wrld_worthy·2024년 1월 2일

JavaScript

목록 보기
21/21

async와 await은 자바스크립트에 가장 최근 도입된 비동기 처리 방식인 콜백 함수와 프로스미스의 단점을 보완했으며 가독성 높은 코드를 작성할 수 있다.

async는 함수 앞에 붙이는 키워드로 이 함수는 asynchronous라는 의미이다.

어떤 함수인지 쉽게 유추가 가능하다.

async, await 함수는 기본적으로 Promise 객체를 다룬다.

asnyc는 Promise 객체를 반환하고 await은 Promise 객체를 사용할 수 있도록 해준다.

// async 사용 예시
const test = async ()=>{
	return "hi"; 
}
console.log(test());

hi를 출력하는게 아닌 Promise 객체로 감싸진 형태로 넘어온 hi를 볼 수 있다.

이렇게 async 함수는 Promise 객체를 반환하는 것을 확인 할 수 있다.

// await 사용 예시
const test = async ()=> {
	return "hi";
}

const test2 = async()=>{
	const sayHi = await test(); 
	console.log(sayHi);
}

console.log(test2())

await은 Promise 객체인 test 함수의 실행이 끝나기를 기다린다. 출력 결과에 Promise 객체가 있는 것은 console.log(test2())의 결과 값이고 역시 async 함수는 Promise 객체를 반환하는 것을 다시 볼 수 었다.

실행 결과가 뭔가 이상하다??
원래라면 hi가 먼저 나오고 promise 객체가 나와야한다. 하지만 반대로 나왔다... 왜 일까?
이게 바로 앞에서 봤던 비동기 처리의 결과인 것이다!!

await을 좀 더 체감할 만한 다른 예시를 봐보자!!

const waitOneSecond = (msg) => {
  return new Promise((resolve,_)=>{
    setTimeout(()=>resolve(`${msg}`),1000);
  });
}

const countOneToTen = async () => {
  for (let x of [...Array(10).keys()]){
    let result = await waitOneSecond(`${x+1}초 대기중 ...`);
    console.log(result);
  }
  console.log("완료");
}

countOneToTen();

0개의 댓글