Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 | 31 |
Tags
- VITE
- db
- 셀프넘버
- 플로이드워셜
- js
- 리액트
- SSAFY
- 머신러닝종류
- PWA
- QuerySetAPI
- 싸피셜
- Django
- TypeScript
- queryset
- 데코레이터
- sqld
- unionfind
- 알고리즘
- 백준
- pwa적용하기
- SSAFYcial
- vitepwa
- 싸피10기
- Javascript
- Python
- SQL
- git
- react
- 14658
- 싸피
Archives
- Today
- Total
Meme's IT
[JS] async와 await 본문
Promise의 chaining
→ 콜백 함수에 비해서는 간결하긴 한데 그래도 너무 복잡하지 않나...?
좀 더 간단하게 하는 방법이 없을까?
async와 await를 사용해보자
# async & await
Promise chaining의 가독성 문제를 해결하기 위해 등장
일반적으로 try & catch와 함께 사용한다
🔹 async 함수
async 키워드를 함수 앞에 붙여서 비동기 함수를 선언
항상 Promise를 반환한다.
async function process() {
return result;
}
🔹 await 표현식
await 키워드를 async 함수 내에서 사용
비동기 함수의 완료를 기다렸다가, 완료하면 resolve를 통해 전달된 데이터를 반환한다.
function placeOrder(menu) {
return new Promise((resolve) => {
setTimeout(() => {
const orderId = Math.floor(Math.random() * 1000) + 1;
resolve({ orderId, menu })
}, Math.random() * 2000);
})
}
function cook(order) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const isCookingSuccessful = Math.random() < 0.8;
if (isCookingSuccessful) {
resolve(order)
} else {
reject(`주문 실패: ${order.menu} 요리 실패, 다시 주문해주세요.`);
}
}, Math.random() * 2000);
})
}
function deliver(order) {
return new Promise((resolve, reject) => {
setTimeout(() => {
const isDeliverySuccessful = Math.random() < 0.9;
if (isDeliverySuccessful) {
resolve(`주문 성공: ${order.menu} 배달 완료!`)
} else {
reject(`주문 실패: ${order.menu} 배달 실패, 다시 주문해주세요.`);
}
}, Math.random() * 2000);
})
}
async function processOrder(orderDetails) {
try {
const returnedOrder = await placeOrder(orderDetails.menu)
console.log(`주문이 생성되었습니다. ${returnedOrder.menu} 요리 주문 ID: ${returnedOrder.orderId}`);
const cookedOrder = await cook(returnedOrder)
console.log(`${cookedOrder.menu} 요리 완료!`);
const status = await deliver(cookedOrder)
console.log(status)
console.log("-----------------------------");
} catch (error) {
console.error(error)
}
}
const orderDetailsList = [
{ menu: "치킨" },
{ menu: "피자" },
{ menu: "샐러드" },
];
orderDetailsList.forEach((element) => {
processOrder(element);
});
'FrontEnd > JavaScript' 카테고리의 다른 글
[JS] JS에서 배열 만들기(Array, Array.of, Array.from) (0) | 2024.06.11 |
---|---|
[JS] JavaScript에서 import 써보기 (0) | 2023.11.13 |
[JS] Node js에서 Promise 쓰기 (0) | 2023.10.31 |
[JS] Axios (0) | 2023.10.30 |
[JS] 동기와 비동기 (0) | 2023.10.30 |