본문 바로가기

프로그래밍/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