async
async 함수는 fuction 앞에 위치합니다.
해당 함수는 항상 프라미스를 반환합니다. 프라미스가 아닌 값을 반환하더라도 이행 상태의 프라미스 (resolved promise)로 값을 감싸 이행된 프라미스가 반환되도록 합니다.
async function f() { let promise = new Promise((resolve, reject) => { setTimeout(() => resolve("완료!"), 1000) }); let result = await promise; // 프라미스가 이행될 때까지 기다림 (*) alert(result); // "완료!" } f();= async가 붙은 함수는 반드시 프라미스를 반환하고, 프라미스가 아닌 것은 프라미스로 감싸 반환합니다.
await
(기다리다)
await 은 async 함수 안에서만 동작합니다.
async function f() { return 1; } f().then(alert); // 1
함수를 호출하고, 함수 본문이 실행되는 도중에 잠시 '중단' 되었다가 프라미스가 처리되면 실행이 재개됩니다. 이때 프라미스 객체의 result 값이 변수 result에 할당됩니다.
따라서 위 예시를 실행하면 1초 뒤에 '완료!'가 출력됩니다.
await는 말 그대로 프라미스가 처리될 때까지 함수 실행을 기다리게 만듭니다.
프라미스가 처리되길 기다리는 동안엔 엔진이 다른 일(다른 스크립트를 실행, 이벤트 처리 등)을 할 수 있기 때문에, CPU 리소스가 낭비되지 않습니다.
await는 promise.then보다 좀 더 세련되게 프라미스의 result 값을 얻을 수 있도록 해주는 문법입니다. promise.then보다 가독성 좋고 쓰기도 쉽습니다.
'Java script > 개념' 카테고리의 다른 글
빅오 표기법 (알고리즘 효율성) (2) | 2022.12.23 |
---|---|
<Optional chaining> 옵셔널체이닝 (0) | 2022.11.03 |
기본타입 vs 참조타입 (0) | 2022.10.08 |
Java Script의 ES(ECMA Screapt)란? (0) | 2022.10.02 |
함수 선언문 vs 함수 표현식 (1) | 2022.09.30 |