개발공부/Javascript

#기본기10_async / await

킴승 2024. 4. 3. 12:27

 

asycn  /  await를 사용하면 프라미스를 편하게 사용할 수 있다.

 

함수에 async를 붙이면 해당 함수는 항상 프라미스를 반환한다.

프라미스가 아닌 값을 반환하더라도 이행상태(resolved promise)로 값을 감싸

이행된(성공한) 프라미스가 반환되도록 한다.

// 일반 함수에서 async 작성법, function 앞에 작성한다
async function test() {
	return 7;
}
// 화살표 함수에서 async 작성법, 인수(Parameter)앞에 async를 작성한다.
const test = async() => {
	return 7;
}

 

await와의 활용

 

await는 말 그대로 프라미스가 처리될 때까지 함수 실행을 기다리게 만듭니다.

프라미스가 처리되면 그 결과와 함께 실행이 재개되죠.

프라미스가 처리되길 기다리는 동안엔 엔진이 다른 일(다른 스크립트를 실행, 이벤트 처리 등)을 할 수 있기 때문에

CPU 리소스가 낭비되지 않습니다. (https://ko.javascript.info/async-await)

async function foo() {
  let promise = new Promise((resolve, reject) => {
  	setTimeout(() => resolve("1초뒤나옴"), 1000)
  });
  
  let result = await promise; // 프라미스가 이행될 때까지 기다림
  alert(result) // 1초뒤나옴
}

foo();

 

클래스 메서드에서도 async / await 를 사용할 수 있다

class Person{
	async name(){
    	return await Promise.resolve("bin");
    }
}

new Person()
	.name()
    .then(alert); // bin

 

에러처리는 일반적으로 try..catch문을 사용한다

async function foo(){
	try{
    	const reponse = await fetch("http://자고싶어라")
        const result = await response.json();
        console.log(result)
    } catch(error){
    	console.log(error) // 에러 처리
    }
}

 

다음시간엔 fetch()에 대해 알아보자..

 

출처 : 자바스크립트인포, gpt