📌Promise란
Promise 는 JavaScript에서 비동기 작업의 결과를 나타내는 객체이다. 비동기 작업이 완료되면 Promise 는 결과를 소비하는 코드에 결과를 전달한다.
📌Promise 는 세 가지 상태를 가진다.
상태가 변화하면 더 이상 변경되지 않으며, 이후에는 결과를 소비하는 메서드를 통해 결과를 처리할 수 있다.
Promise 의 결과를 처리하기 위해 다음과 같은 메서드를 사용한다.
fetch('https://no-such-server.blabla') // 거부
.then(response => response.json())
.catch(err => alert(err)); // TypeError: failed to fetch
fetch('/article/promise-chaining/user.json')
.then(response => response.json())
.then(user => fetch(`https://api.github.com/users/${user.name}`))
.then(response => response.json())
.then(githubUser => {
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);
})
.catch(error => alert(error.message));
new Promise((resolve, reject) => {
throw new Error("에러 발생!");
}).catch(alert); // Error: 에러 발생!
new Promise((resolve, reject) => {
resolve("OK");
}).then(result => {
throw new Error("에러 발생!"); // 프라미스가 거부됨
}).catch(alert); // Error: 에러 발생!
window.addEventListener('unhandledrejection', function(event) {
alert(event.promise); // [object Promise]
alert(event.reason); // Error: 에러 발생!
});
async function f() {
return 1;
}
f().then(alert); // 1
async function f() {
let promise = new Promise((resolve) => {
setTimeout(() => resolve("완료!"), 1000);
});
let result = await promise; // 프라미스가 이행될 때까지 대기
alert(result); // "완료!"
}
f();
async function f() {
try {
let response = await fetch('http://유효하지-않은-주소');
} catch (err) {
alert(err); // TypeError: failed to fetch
}
}
f();
let results = await Promise.all([
fetch(url1),
fetch(url2),
// ...
]);
[CS] HTTP의 기본 특징: 무상태성(Stateless)과 연결 비의존성(Connectionless) (0) | 2025.02.02 |
---|---|
[CS] Hibernate의 더티 체킹과 영속성 컨테이너: 데이터베이스와의 효율적 상호작용 (1) | 2025.02.02 |
[CS] Java ORM: Hibernate의 더티 체킹 및 영속성 관리 (5) | 2025.01.24 |
[CS] 정규 표현식을 활용한 데이터 유효성 체크: 회원 ID, 비밀번호, 이메일, 전화번호 확인하기 (2) | 2025.01.22 |
[CS] 싱글톤 패턴: 전역 상태 관리의 핵심 (2) | 2025.01.21 |