비동기 처리 - 3. Promise Chainig | Error Handling 글 보러 가기
비동기 처리 - 4. Promise API 글 보러 가기
개요
- 개요는 시리즈 1편과 동일함
- 이하 글 및 코드의 근본적인 출처는 https://ko.javascript.info/async-await
1. async, await 개요
의미
프로미스 문을 보다 가독성 있게 만들어주는 도구
특징
- function 앞에 async 사용
- async 키워드가 반드시 있어야 함수 내에서 await 사용 가능 : async + await 은 짝꿍!
- await = Promise ~ .then 이라고 볼 수 있음
예시 코드
async function f() {
let promise = new Promise((resolve, reject) => { //async 함수 내에 프로미스도 넣을 수 있음
setTimeout(() => resolve("완료!"), 1000)
});
let result = await promise; // 프라미스가 이행될 때까지 기다림 (*)
alert(result); // "완료!"
}
f();
// 프로젝트에 적용
async detect(imageData) {
if (!this._detector) {
this._detector = await this._createDetector();
console.log("model loading success!, detector: ", this._detector);
}
this._result = await this._detector.estimateFaces(imageData);
console.log('this._result: ', this._result);
//... 중략
}
에러 핸들링 : try ~ catch 문과 함께 사용 가능!
async function f() {
try {
let response = await fetch('http://유효하지-않은-주소');
let user = await response.json();
} catch(err) {
// fetch와 response.json에서 발행한 에러 모두를 여기서 잡습니다.
alert(err);
}
}
f();
2. 프로미스 함수와 비교
프로미스
function showAvatar(githubUser) {
return new Promise(function(resolve, reject) {
let img = document.createElement('img');
img.src = githubUser.avatar_url;
img.className = "promise-avatar-example";
document.body.append(img);
setTimeout(() => {
img.remove();
resolve(githubUser);
}, 3000);
});
}
async, await
async function showAvatar() {
let img = document.createElement('img');
img.src = githubUser.avatar_url;
img.className = "promise-avatar-example";
document.body.append(img);
await new Promise((resolve, reject) => setTimeout(resolve, 3000));
// await은 Promise 및 Promise.all과 함께 사용 가능
img.remove();
return githubUser;
}
- .catch 대신 try ~ catch 문 사용 가능 → 가독성 향상
- 주의할 점 : async, await은 프로미스 기반임
3. 비동기 관련 추가로 공부하면 좋을 주제
'Backend > Node.js' 카테고리의 다른 글
[Asynchronous] 비동기 처리 - 5. Microtask : 비동기 처리의 메모리 측면 개념 (0) | 2023.12.01 |
---|---|
[Asynchronous] 비동기 처리 - 4. Promise API (0) | 2023.12.01 |
[Asynchronous] 비동기 처리 - 3. Promise Chaining | Error Handling (1) | 2023.12.01 |
[Asynchronous] 비동기 처리 - 2. Promise (1) | 2023.12.01 |
[Asynchronous] 비동기 처리 - 1. 비동기와 콜백 (0) | 2023.12.01 |