ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • async / await
    JavaScript ES6 2022. 6. 2. 03:08

    Promise가 복잡하면 async 와 await를 쓰면 된다고 한다.

    이 문법은 ES8부터 제공을 한다.

    async function 더하기() {//함수 실행 후에 promise오브젝트가 남게됨
    	return 1 + 1;
    }
    
    더하기().then(function(결과){
    	console.log(결과);
    })

    이렇게 연산이 끝나면 특정 코드를 실행하고 싶어서 promise를 쓰려했는데, function을 지우고 promise를 쓰기 귀찮으면 

    함수 앞에다 만 붙일 수 있는 async라는 키워드를 사용할 수 있다.

    그러면, 함수가 실행이 되고나서 promise오브젝트가 남게 된다.

    그리고, async함수에 return을 쓰면 then에 결과를 확인할 수도 있다.

     

    단점으론, 성공만 사용가능하다.

     

    이제, await을 배워보자.

    async function 더하기() {
    	
        var 프로미스 = new Promise(function(성공, 실패){
        	var 힘든연산= 1 + 1;
            성공();
        });
        
        프로미스.then(function(){
        	console.log('성공');
        })
    }
    더하기();
    
    //더하기().then(function(결과){
    //	console.log(결과);
    //})

    이렇게, 함수 안에서 promise를 만들어서 사용하고, 함수를 사용해주면 콘솔창에 성공이라고 나오게 된다. 

    이걸 좀 더 예쁘게 쓰는게 await이다.

    async function 더하기() {
    	
        var 프로미스 = new Promise(function(성공, 실패){
        	var 힘든연산= 1 + 1;
            성공();
        });
        
        var 결과 = await 프로미스;//프로미스 해결까지 기다려라는 뜻이다.
        console.log(결과);
        
    }
    더하기();

    위처럼 사용하며, then은 성공판정이 나면 어떤 코드를 실행할게 였다면, await 프로미스 이렇게 쓰면, 프로미스 해결까지 기다렸다가, 그걸 결과에 담아~ 이러곤 결과를 출력하게 된다.

     

    이는 async안에서만 사용가능하며, 프로미스 실패시 에러나고 코드가 멈추게 된다. 

     

    그래서 실패를 다루는 문법을 써야하는데, 이는 try와 catch문법이다.

    try { 이걸해보고 } catch { 안되면 이걸실행해주세요 }

    이렇게 된다. 그래서, 수정해보면

    try {
    	var 결과 = await 프로미스;
        	console.log(결과);
    } catch {
    	console.log('프로미스 에러남');
    }

    'JavaScript ES6' 카테고리의 다른 글

    Symbol자료형  (0) 2022.06.03
    for in / for of 반복문  (0) 2022.06.02
    Promise  (0) 2022.06.01
    동기/비동기와 콜백함수  (0) 2022.05.31
    Stack, Queue를 이용한 웹 동작원리  (0) 2022.05.31

    댓글

Designed by Tistory.