-
[JS] async functionJavaScript 2022. 12. 20. 10:06반응형SMALL
async 비동기함수
- async/await함수의 목적은 사용하는 여러 promise의 동작을 동기스럽게 사용할 수 있게하고, 어떠한 동작을 여러 promise의 그룹에서 간단하게 동작하게 하는 것이다. promise가 구조화된 callback과 유사한것 처럼 async/await 또한 제네레이터(generator)와 프로미스(promise)를 묶는것과 유사하다.
- async함수는 항상 promise를 반환한다. 만약 async함수의 반환값이 명시적으로 promise가 아니라면 암묵적으로 promise로 감싸진다.
async function foo() { return 1 } // 위 코드는 아래와 같다 function foo() { return Promise.resolve(1) }
- async 함수의 본문은 0개 이상의 await문으로 분할된 것으로 생각할 수 있다.
첫번째 awiat문을 포함하는 최상위 코드는 동기적으로 실행된다. 따라서 await문이 없는 async함수는 동기적으로 실행된다.
하지만 await문이 있다면 async함수는 항상 비동기적으로 완료된다.
예를들어,
async function foo() { await 1 } //위 코드는 아래와 같다 function foo() { return Promise.resolve(1).then(() => undefined) }
# 예제1. 날짜 validation
async checkValidation () { return new Promise(async (resolve, reject)=>{ let frDate = new Date(calendarFrom) let toDate = new Date(calendarTo) if(toDate < frDate){ alert('시작일자가 종료일자보다 클 수 없습니다.'); return resolve(false) } let checkDays = await getNumberDays(calendarFrom, calendarTo) if(checkDays > 180){ alert('조회는 6개월 기간까지만 조회할 수 있습니다.'); return resolve(false) } return resolve(true) }) },
# 예제2. API request, response
getBarCode : function (barcode) { return new Promise(async (resolve, reject)=>{ let param = { Name: this.data.Name Id: this.data.Id, }; let result = await Api.getQRBarCode.setParam(param).getResponse(); return resolve(result.response.body) }) },
반응형LIST'JavaScript' 카테고리의 다른 글
[JS] at 인덱스 요소 반환 (0) 2023.04.14 [JS] 몫과 나머지 구하기 (0) 2023.04.13 [JS] keydown, keyup, keypress (0) 2022.12.07 [JS] focus, blur Event (0) 2022.12.06 [JS] forEach (0) 2022.11.30