JS에서 비동기를 편리하게 할 수 있도록 도와주는 object
pending -> promise가 생성되고, 우리가 지정한 operation이 실행중..
fulfilled -> 실행 완료!
rejected-> 실행 실패!
원하는 데이터를 만들어내는 producer(promise object) 와 이 데이터를 소비하는 consumer
const promise = new Promise((resolve, reject) => {
console.log("doing something heavy...");
});
const promise = new Promise((resolve, reject) => {
console.log("doing something heavy...");
setTimeout(() => {
resolve("gyong");
}, 2000);
});
then
, catch
, finally
에 대해 알아보자
promise.then((value) => console.log(value));
then
을 통해 손쉽게 받아올 수 있다.const promise = new Promise((resolve, reject) => {
console.log("doing something heavy...");
setTimeout(() => {
// resolve("gyong");
reject(new Error("no network"));
}, 2000);
});
promise
.then((value) => {
console.log(value);
})
.catch((error) => {
console.log(error);
});
then
도 결국 promise를 return 하기 때문에, return된 promise에서 catch를 호출에 에러 처리도 가능하다!promise
.then((value) => {
console.log(value);
})
.catch((error) => {
console.log(error);
})
.finally(() => console.log("finally"));
fetchNumber
.then((num) => num * 2)
.then((num) => num * 3)
.then(
(num) =>
new Promise((resolve, reject) => {
resolve(num - 1);
})
)
.then((num) => console.log(num - 1));
class UserStorage {
loginUser(id, password) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (id === "gyong" && password === "1234") {
resolve(id);
} else {
reject(new Error("not found"));
}
}, 2000);
});
}
getRoles(user) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (user === "gyong") {
resolve({ name: "gyong", role: "admin" });
} else {
reject(new Error("no access"));
}
}, 1000);
});
}
}
const userStorage = new UserStorage();
id = prompt("enter your id:");
password = prompt("enter your password");
userStorage
.loginUser(id, password)
.then((user) => userStorage.getRoles(user))
.then((position) =>
console.log(`Hello ${position.name} you have ${position.role}`)
);