일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- tailwind
- tanstack query
- styled component
- Next.js
- 프론트엔드
- reduxtoolkit
- 동적계획법
- 코어자바스크립트
- 코딩테스트
- 코테
- 리액트
- 리액트 라우터 돔
- 리덕스
- React
- Form
- 타입스크립트
- 리액트 패턴
- revalidatepath
- 토이 프로젝트
- react pattern
- 스택
- Supabase
- 그리디
- TypeScript
- react router dom
- JavaScript
- React Query
- 자바스크립트
- 프로그래머스
- 토이프로젝트
- Today
- Total
느려도 한걸음씩
자바스크립트 비동기 이해하기 - (3.1) Promise란? 본문
2025.04.16 - [FE develop/Javascript] - 자바스크립트 비동기 이해하기 - (2) 비동기 콜백
자바스크립트 비동기 이해하기 - (2) 비동기 콜백
2025.04.16 - [FE develop/Javascript] - 자바스크립트 비동기 이해하기 - (1) 동기 vs 비동기 자바스크립트 비동기 이해하기 - (1) 동기 vs 비동기🧠 자바스크립트 비동기 이해하기 - (1) 동기 vs 비동기프로그
hjh0806.tistory.com
📦 Promise란?
자바스크립트에서 Promise(프로미스)는 비동기 작업의 성공 또는 실패를 나타내는 객체입니다. 비동기 처리를 더 직관적이고 체계적으로 다룰 수 있게 도와주는 핵심 개념 중 하나입니다.
✅ Promise를 상자로 비유해볼까요?
Promise는 비유하자면 처음엔 비어있는 상자입니다. 이 상자는 비동기 작업이 끝날 때, 그 결과(성공이든 실패든)로 채워지게 됩니다.
즉, 비동기 작업이 끝나기 전에는 상자가 비어 있고(pending 상태),
성공하면 결과로 채워지고(fulfilled 상태),
실패하면 에러로 채워지는(rejected 상태) 개념입니다.
🔍 Promise의 상태
Promise는 다음과 같은 세 가지 상태를 가집니다.
pending | 비동기 작업이 아직 완료되지 않은 상태 |
fulfilled | 비동기 작업이 성공적으로 완료된 상태 |
rejected | 비동기 작업이 실패한 상태 |
각 상태에서의 결과(Result)는 다음과 같습니다:
- pending → result는 undefined
- fulfilled → result는 비동기 작업의 반환값
- rejected → result는 에러 객체
🛠 Promise 객체 만들기
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const data = { name: '철수' }
console.log("네트워크 요청 성공")
resolve(data)
}, 1000)
})
위 코드에서 new Promise()를 통해 프로미스를 생성하고, 내부의 executor 함수는 즉시 실행됩니다. 이 함수는 두 가지 콜백인 resolve(성공 시 호출)와 reject(실패 시 호출)를 인자로 받습니다.
🧪 예시: 성공과 실패 처리
✔ 성공 시
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const data = { name: '철수' }
resolve(data)
}, 1000)
})
❌ 실패 시
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const data = null
if (data) {
resolve(data)
} else {
reject(new Error("네트워크 문제가 발생했습니다"))
}
}, 1000)
})
📞 Promise를 함수 내부에서 만들기
비동기 작업을 특정 시점에 실행하고 싶다면, 함수 안에서 Promise 객체를 생성하면 됩니다.
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
const data = { name: '철수' }
if (data) {
resolve(data)
} else {
reject(new Error("네트워크 문제가 발생했습니다"))
}
}, 1000)
})
}
📚 Promise 후처리 메서드
- .then()
→ fulfilled 상태(성공)일 때 실행할 콜백 함수를 등록합니다.
→ 콜백 함수의 매개변수에는 resolve()에서 전달한 결과값이 들어옵니다. - .catch()
→ rejected 상태(실패)일 때 실행할 콜백 함수를 등록합니다.
→ 콜백 함수의 매개변수에는 reject()에서 전달한 에러 객체가 들어옵니다. - .finally()
→ 성공이든 실패든 상관없이 항상 마지막에 실행할 콜백 함수를 등록합니다.
→ 이 메서드는 결과값이나 에러 객체를 전달받지는 않지만, 정리 작업에 유용하게 쓰입니다.
- Promise는 비동기 작업이 완료된 이후에 실행할 수 있는 후속 처리 메서드를 제공합니다:
getData()
.then((data) => {
console.log("받은 데이터:", data)
})
.catch((error) => {
console.error("에러 발생:", error.message)
})
.finally(() => {
console.log("마무리 작업 수행")
})
🧾 정리
- Promise는 비동기 작업의 성공/실패 결과를 표현하는 자바스크립트 객체입니다.
- pending, fulfilled, rejected의 3가지 상태를 가집니다.
- resolve()는 성공 시 호출, reject()는 실패 시 호출합니다.
- .then(), .catch(), .finally()를 통해 후처리를 체계적으로 구성할 수 있습니다.
다음 포스트에서는 Promise를 더 깊이 있게 다뤄보겠습니다.
'FE develop > Javascript' 카테고리의 다른 글
자바스크립트 비동기 이해하기 - (3.3) Promise Static 함수 (0) | 2025.04.18 |
---|---|
자바스크립트 비동기 이해하기 - (3.2) Promise를 더 알아보자 (1) | 2025.04.18 |
자바스크립트 비동기 이해하기 - (2) 비동기 콜백 (0) | 2025.04.16 |
자바스크립트 비동기 이해하기 - (1) 동기 vs 비동기 (0) | 2025.04.16 |
DOM - 이벤트 위임(Event Delegation) (1) | 2024.10.22 |