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' 카테고리의 다른 글
[tauri] 테스트용 앱 기본 구성 (0) | 2024.05.03 |
---|---|
리액트 주요 요소 (0) | 2024.04.24 |
[tauri] 개발환경 (0) | 2024.03.19 |
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 |