async, await

2024. 1. 4. 16:05Study/JavaScript

async, await

async, await을 사용해서 비동기 프로그래밍을 할 수 있다.

 

async 키워드를 사용해서 함수를 선언하게 되면 함수 내부에서 await 키워드를 사용할 수 있다.

await 키워드는 promise로 만든 함수에만 사용할 수 있다.

await을 사용하면 다음 코드를 실행하지 않고 promise를 기다린다.

 

하지만 스레드를 막고 있지는 않아서 함수 외부의 다른 코드는 실행된다.

const getPromise = (seconds) => new Promise((resolve, reject)=>{
   setTimeout(()=>{
     resolve('완료');
   }, seconds * 1000);
});


// async 함수 선언
// async 함수 키워드로 함수를 선언하면 함수 내부에서 await 키워드를 사용할 수 있다.
async function runner(){
  const result1 = await getPromise(1);
  /*
  await은 promise에다가만 쓸 수 있다.
  await을 사용하면 Promise를 기다린다.
  await의 다음 코드가 await 키워드 뒤의 함수(Promise)가 끝날때 까지 실행되지 않는다.
  
  하지만 스레드를 막고 있지는 않아서
  runner() 함수 외부의 다른 함수는 실행된다.
  */
  
  console.log(result1);
  
  
  const result2 = await getPromise(2);
  console.log(result2);
  const result3 = await getPromise(1);
  console.log(result3);
}

runner();
console.log('실행 끝');


/*
실행 끝
완료
완료
완료
*/
// '실행 끝' 출력 후 1초 뒤에 '완료' 출력
// 그리고 2초 뒤에 '완료' 출력
// 그리고 1초 뒤에 '완료' 출력

 

 

resolve() 함수는 잘 실행이 되지만 reject() 함수를 사용하면 에러가 발생한다.

try, catch 문을 사용해야 한다.

const getPromise = (seconds) => new Promise((resolve, reject)=>{
   setTimeout(()=>{
     reject('에러');
   }, seconds * 1000);
});


async function runner(){

  try {
    const result1 = await getPromise(1);
    console.log(result1);
    const result2 = await getPromise(2);
    console.log(result2);
    const result3 = await getPromise(1);
    console.log(result3);
  }
  catch(e) {
    console.log('--- catch e ---');
    console.log(e);
  }
  finally() {
    console.log('--- finally ---');
  }
}

runner();
console.log('실행 끝');


/*
--- catch e ---
에러
--- finally ---
*/

 

 


 

캡틴판교

https://joshua1988.github.io/web-development/javascript/js-async-await/

 

자바스크립트 async와 await

(중급) 자바스크립트 개발자를 위한 async, await 사용법 설명. 쉽게 알아보는 자바스크립트 async await 개념, 사용법, 예제 코드, 예외 처리 방법

joshua1988.github.io

 

캡틴판교 | Cracking Vue.js | Async & Await

https://joshua1988.github.io/vue-camp/es6+/async-await.html

 

Async & Await | Cracking Vue.js

Async & Await 어싱크 어웨이트는 자바스크립트 비동기 처리 패턴의 최신 문법입니다. Promise와 Callback에서 주는 단점들을 해결하고 자바스크립트의 비동기적 사고 방식에서 벗어나 동기적(절차적)

joshua1988.github.io

 

'Study > JavaScript' 카테고리의 다른 글

Element: insertAdjacentHTML()  (0) 2024.04.15
vanillaJS module  (0) 2024.01.09
Callback Hell and Promise  (0) 2024.01.04
Async Programming  (0) 2024.01.04
Closure  (0) 2024.01.02