자바스크립트

[JS]비동기(async/await)

민ズl 2024. 10. 10. 16:34

콜백 패턴은 가독성이 좋지 않은데 프로미스도 콜백 패턴을 사용함🤔
👉이문제를 해결하기 위해 ES8에서 마치 동기 처리처럼 처리하는 🌟async/await🌟 가 도입됨!!!

[프로미스 참고]

 

[JS]비동기(프로미스)

자바스크립트는 비동기 처리를 위한 하나의 패턴으로 콜백 함수를 사용👉하지만 콜백지옥(callback hell)로 인해 가독성이 나쁘며 발생한 에러 처리가 곤란* 콜백지옥(callback hell) : 콜백 함수를 중

bom-na.tistory.com

async 함수🎈

  • async 함수는 async 키워드를 사용해 정의하며 언제나 프로미스를 반환
  • async 함수가 명시적으로 프로미스를 반환하지 않더라도 async 함수는 암묵적으로 반환값을 resolve하는 프로미스를 반환
  • await 키워드는 반드시 async 함수 내부에서 사용해야 함
//async 함수 선언문
async function foo(n) {return n;}
foo(1).then(console.log) // 1

//async 함수 표현식
const bar = async function (n) {return n;};
bar(2).then(console.log) // 2

//async 화살표 함수
const baz = async n => n;
baz(3).then(console.log); // 3

//async 메서드
const obj = {
	async foo(n) {return n;}
};
obj.foo(4).then(console.log) // 4

//async 클래스 메서드
class MyClass {
	async bar(n) {return n;}
}
const myClass = new MyClass();
myClass.bar(5).then(console.log); //5

 

[mdn 공식문서]

 

async function - JavaScript | MDN

async function 선언은 AsyncFunction객체를 반환하는 하나의 비동기 함수를 정의합니다. 비동기 함수는 이벤트 루프를 통해 비동기적으로 작동하는 함수로, 암시적으로 Promise를 사용하여 결과를 반환

developer.mozilla.org


await 키워드🎈

  • 프로미스가 settled 상태(비동기 처리가 수행된 상태)가 될 때까지 대기하다가
    settled 상태가 되면 프로미스가 resolve한 처리 결과를 반환
  • 반드시 프로미스 앞에서 사용해야 함
async function bar(n) {
	const a = await new Promise(resolve => setTimeout(() => resolve(n), 3000));
    //두번째 비동기 처리를 수행하려면 첫번째 비동기 처리 결과가 필요
    const b = await new Promise(resolve => setTimeout(() => resolve(a + 1), 2000));
    //세번째 비동기 처리를 수행하려면 두번째 비동기 처리 결과가 필요
    const c = await new Promise(resolve => setTimeout(() => resolve(b + 1), 1000));
    
    console.log([a,b,c]); // [1,2,3]
}

bar(1); // 약 6초 소요

 

[mdn 공식문서]

 

await - JavaScript | MDN

Promise 혹은 기다릴 어떤 값입니다.

developer.mozilla.org

 

'자바스크립트' 카테고리의 다른 글

[JS]클로저(Closure)  (0) 2024.10.10
[JS]프로토타입  (2) 2024.10.10
[JS]비동기(프로미스)  (1) 2024.10.10
[JS]단축평가  (1) 2024.10.09
[JS]자료구조(Set,Map)  (1) 2024.10.09