본문 바로가기

프로그래밍/Web

[JavaScript] Promise, async/await

Promise


비동기 작업을 처리할 Promise 리턴 함수 작성

function doAsyncFunction() {

return new Promise( (resolve, reject) => {

시간이 걸리는 작업


작업 완료 후 resolve() 를 호출해 준다.

resolve( outData );


작업이 실패한 경우 reject() 를 호출해 준다.

reject( errData );

});

}



then() 을 사용해 처리 결과 받는 두가지 방법


1. then() 호출시 두인자( resolve(), reject() ) 를 전달

doAsyncFuntion().then( (outData) => {

resovle() 결과 처리

}, (errData) => {

reject() 결과 처리

});


2. reject()는 catch() 함수를 사용

doAsyncFunction().then( (outData) => {

이 함수가 Promise resolve()와 매핑

}).catch( (errData) => {

catch() 함수 사용해 reject() 함수와 매핑

});




여러개의 작업 실행

Promise.all( [work1(), work2()] ).then( (outData) => {

work1, work2 가 모두 완료되면 호출

});




async/await


함수 선언시 async 키워드를 붙이면 함수 내부에서 await 를 통한 비동기 처리가 가능

then() , catch() 는 결국 콜백을 추상화해 순차적으로 표현하는 것이고,

await 는 함수내에서 호출 자체가 절차적으로 이루어지게 된다.


 async function myFunction() {

try {

Promise 를 리턴하는 함수를 await 키워드를 사용해 호출

해당 함수내에서 resolve( outData) 가 호출되면 리턴되며, 그 이전까지는 기다리게 된다.

var outData = await doAsyncFuntion();

} catch( errData ) {

Promise 함수에서 reject( errData ) 가 호출되면, 이곳으로 진행됨.

}

}

'프로그래밍 > Web' 카테고리의 다른 글

WebXR + three.js  (0) 2018.08.09
javascript 모듈화 패턴  (0) 2018.07.26
VSCode 웹 디버깅  (0) 2018.07.19
openssl  (0) 2018.07.17
Windows 레드마인 설치(Bitnami)  (1) 2017.09.22
Gradle Wrapper  (0) 2017.03.06
스프링 요청/응답  (0) 2017.02.26
JPA 쿼리 이것저것  (0) 2017.02.22
[spring] 프로퍼티 값 읽기  (0) 2017.02.21
[spring] 핸들러 인터셉터  (0) 2017.01.24