promise객체를 단순하게 사용 할 수 있는 방법으로 ES2017에 정식 채택되었다.
async
키워드 함께 사용await
붙여 사용// 함수 선언할때 async 함께사용
// function 으로 함수 선언시 : async function funcName (){}
const getData = async (url) => {
let v;
// 예외처리를 위해 try{} catch{}문 사용
try {
// await로 downloadData()의 반환값을 기다렸다 v에 할당
v = await downloadData(url);
return processDataInWorker(v); // 비동기작업에서 에러발생의 경우 현재 코드는 실행안됌!
} catch (e) {
console.log(e) // 에러출력 or 에러의 경우 처리할 로직작성하자
}
}
promise의 경우 .catch()
로 예외처리(오류처리)를 하게 되는데 async & await
를 사용할 땐 try & catch
를 사용하여 오류를 잡아줘야 한다. promise사용보다 async & await
를 사용하는 것이 더 간결하단 의견도 있지만, try, catch 를 사용하게 되면 비슷하게 조잡스러지는 것 같다. 하하핳
예외처리를 안할 경우 ?
에러가 났지만, 이후 로직을 계속 실행한다. 변수에 비동기처리 반환 값이 담겨야 하는데 undefined 상태가 되며, 해당 변수가 사용되는 곳에서 값에 따른 오류를 출력할 수 있다.
try {...} catch {...} finally{...}
와 함께 사용하여 예외처리를 한다.break
, continue
, return
키워드와 함께 흐름 조작이 가능하다try
: 코드 시작 점catch
: 에러발생의 경우 try
즉시 중단하고 catch
실행finally
: 에러가 나든 안나든 무조건 마지막에 실행되는 곳 (try->finally
또는 try->catch->finally
로 실행됨)