-
async / awaitJavaScript 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