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
- 리액트
- TiL
- 사이드프로젝트
- 자바
- 큐
- HTML
- JavaScript
- 크래프톤 정글
- Vue.js
- 백준
- 알고리즘
- 4기
- 나만무
- 스택
- Flutter
- 크래프톤정글
- 티스토리챌린지
- pintos
- corou
- 소켓
- CSS
- 자바스크립트
- 시스템콜
- Java
- 코드트리
- 모션비트
- 오블완
- defee
- userprog
- 핀토스
Archives
- Today
- Total
미새문지
Promise와 async/await의 차이점 본문
728x90
JavaScript에서 Promise와 async/await는 비동기 처리를 관리하는 방식이다.
두 방식 모두 비동기 작업의 결과를 처리하는 데 사용되지만, 문법과 사용 방식에서 차이가 있다.
Promise
- Promise는 비동기 작업이 완료되었을 때 결과를 처리하는 객체이며, Promise는 세 가지 상태를 가질 수 있다.
- Pending(대기): 비동기 작업이 아직 완료되지 않은 상태
- Fulfilled(이행): 비동기 작업이 성공적으로 완료된 상태
- Rejected(거부): 비동기 작업이 실패한 상태
- Promise를 사용할 때는 주로 .then(), .catch(), .finally() 메서드를 사용하여 비동기 작업이 완료되었을 때의 처리 로직을 작성한다.
const myPromise = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Success!");
}, 1000);
});
myPromise
.then(result => {
console.log(result); // "Success!" 출력
})
.catch(error => {
console.error(error);
});
async/await
- async/await는 Promise를 더 간결하고 읽기 쉽게 사용하기 위한 문법이며, async/await를 사용하면 비동기 코드를 마치 동기 코드처럼 작성할 수 있다.
- async 키워드를 함수 앞에 붙이면 그 함수는 항상 Promise를 반환하며, 함수 내에서 await 키워드를 사용하여 Promise가 해결될 때까지 기다릴 수 있다.
const myAsyncFunction = async () => {
try {
const result = await myPromise;
console.log(result); // "Success!" 출력
} catch (error) {
console.error(error);
}
};
myAsyncFunction();
주요 차이점
- 문법의 간결성:
- Promise는 .then(), .catch() 메서드 체인을 사용하여 비동기 작업의 결과를 처리하는데, 이는 중첩되거나 여러 비동기 작업이 있을 때 코드가 복잡해질 수 있다.
- async/await는 비동기 작업을 동기 코드처럼 작성할 수 있어 코드가 더 간결하고 읽기 쉬워진다.
- 에러 처리:
- Promise는 .catch() 메서드를 사용하여 에러를 처리한다.
- async/await는 try...catch 블록을 사용하여 에러를 처리하는데, 이는 동기 코드의 에러 처리 방식과 동일하여 직관적일 수 있다.
- 제어 흐름:
- Promise 체이닝은 여러 비동기 작업을 순차적으로 수행할 때 코드의 흐름을 파악하기 어려울 수 있다.
- async/await는 순차적이고 직관적인 코드 흐름을 제공하여 비동기 작업의 순서를 명확히 파악할 수 있다.
코드 예제)
promise
function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data received");
}, 1000);
});
}
fetchData()
.then(data => {
console.log(data);
return fetchMoreData();
})
.then(moreData => {
console.log(moreData);
})
.catch(error => {
console.error(error);
});
async/await
async function fetchData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("Data received");
}, 1000);
});
}
async function fetchMoreData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("More data received");
}, 1000);
});
}
async function getData() {
try {
const data = await fetchData();
console.log(data);
const moreData = await fetchMoreData();
console.log(moreData);
} catch (error) {
console.error(error);
}
}
getData();
이렇게 async/await를 사용하면 비동기 작업의 순차적인 흐름이 더 명확하게 드러나고, 코드의 가독성이 향상된다.
728x90
'웹 프론트엔드' 카테고리의 다른 글
HTML과 XHTML의 차이점 (0) | 2024.07.09 |
---|---|
Flexbox와 Grid (0) | 2024.07.08 |
웹 소켓(Web Socket) 채팅 앱 만들기 - 메세지 전송 (0) | 2024.04.29 |
웹 소켓(Web Socket) 채팅 앱 만들기 - 유저 로그인 (0) | 2024.04.28 |
웹 소켓(Web Socket) 채팅 앱 만들기 - 클라이언트 서버 연결 (0) | 2024.04.27 |