티스토리 뷰
반응형
- JS에서 비동기 처리를 위해 제공하는 방식은 콜백, Promise, async & await가 있다.
- 이 중 가장 최근에 나온 문법이 async와 await이며, 핵심은 가독성 향상에 있다.
i). 문법
- 함수 앞에 async를 붙이고, 함수 내부 실행 중 비동기 처리를 하는 코드 앞에 await을 붙여준다.
- 아래는 어디까지나 예시이며, 각 await 행에서 비동기 처리를 대기하는 Function의 반환값을 처리해줄 것.
// 비동기 처리를 한 번만 하는 경우
async function [FUNCTION_NAME]() {
await [FUNCTION_THAT_RETURN_PROMISE]();
}
// 비동기 처리를 여러번 하는 경우
async function [FUNCTION_NAME]() {
await [FUNCTION_THAT_RETURN_PROMISE1]();
await [FUNCTION_THAT_RETURN_PROMISE2]();
await [FUNCTION_THAT_RETURN_PROMISE2]();
}
- 같은 코드를 Promise 방식으로 쓸 경우,
- then 안의 function은 Promise 객체를 반환하는 함수로 대체할 수 있다.
// 비동기 처리를 한 번만 하는 경우
function [FUNCTION_NAME]() {
[FUNCTION_THAT_RETURN_PROMISE]().then(function() {
//
});
}
// 비동기 처리를 여러번 하는 경우 (Promise chaining)
function [FUNCTION_NAME]() {
[FUNCTION_THAT_RETURN_PROMISE]()
.then(function() {
//
})
.then(function() {
})
.then(function() {
});
}
- 같은 코드를 콜백 방식으로 쓸 경우,
// 비동기 처리를 한 번만 하는 경우
function [FUNCTION_NAME]() {
[FUNCTION_THAT_ASYNC]('url', function() {
//
});
}
// 비동기 처리를 여러번 하는 경우 (콜백지옥)
function [FUNCTION_NAME]() {
[FUNCTION_THAT_ASYNC1]('url', function() {
[FUNCTION_THAT_ASYNC2]('url', function() {
[FUNCTION_THAT_ASYNC3]('url', function() {
//
});
});
});
}
- 즉, async & await은 가독성 면에서 우월함이 있다.
ii). 예외 처리
- async / await의 예외 처리는 try catch를 사용한다.
- 이는 async 과정에서의 네트워크 오류 뿐안 아니라 타입 오류 등의 일반적인 오류까지 잡아줄 수 있는 방법이다.
- 이후는 에러의 유형에 맞게 에러 코드를 처리할 것!
async function errorCatch() {
try {
let user = await getUser();
let id = await getIdByUser();
console.log(id);
} catch (e) {
console.log(e);
}
}
'Dev. > javascript' 카테고리의 다른 글
[JS] Array-like(유사 배열) / Array(배열) (0) | 2021.03.29 |
---|---|
[JS] eval is evil (0) | 2021.03.29 |
[JS] 구조 분해 할당 (destructing assignment) (0) | 2021.03.09 |
[Vanilla JS] document ready 표현 (0) | 2021.02.22 |
[jQuery] best practice - event handling, ajax (0) | 2021.02.18 |
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- jQuery
- Puppeteer
- 코딩테스트
- JEST
- eureka
- pgloader
- Gradle
- Spring Cloud Config
- Linux
- Database
- Node.js
- postgresql
- react
- javascript
- terraform
- mysql
- RancherDesktop
- hashicorp
- Docker
- Git
- shell
- Vault
- spring boot
- IntelliJ
- AWS
- kotlin
- Java
- JPA
- AWS IoT
- etc
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
글 보관함