728x90
12. 프로미스 개념부터 활용까지 JavaScript Promise | 프론트엔드 개발자 입문편 (JavaScript ES6)
// promise.js
"use strict";
// Promise is a JavaScript object for asynchronous operation.
// State: pending -> fulfilled or rejected
// Producer vs Comsumer
// 1. Producer
// when new Promise is created, the executor runs automatically.
const promise = new Promise((resolve, reject) => {
// doing some heavy work (network, read files)
console.log("doing somthing...");
setTimeout(() => {
resolve("ellie");
// reject(new Error("no network"));
}, 2000);
});
// 2. Consumers: then, catch, finally
promise //
.then((value) => {
console.log(value);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("Done");
});
// 3. Promise chaining
const fetchNumber = new Promise((resolve, reject) => {
setTimeout(() => resolve(1), 1000);
});
fetchNumber
.then((num) => num * 2)
.then((num) => num * 3)
.then((num) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(num - 1), 1000);
});
})
.then((num) => console.log(num));
// 4. Error Handling
const getHen = () =>
new Promise((resolve, reject) => {
setTimeout(() => resolve("Chicken"), 1000);
});
const getEgg = (hen) =>
new Promise((resolve, reject) => {
// setTimeout(() => resolve(`${hen} => Egg`), 1000);
setTimeout(() => reject(new Error(`error! ${hen} => Egg`)));
});
const cook = (egg) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${egg} => Egg fry`), 1000);
});
getHen() //
// .then((hen) => getEgg(hen))
.then(getEgg)
// .then((egg) => cook(egg))
.catch((error) => {
return "Bread";
})
.then(cook)
// .then((meal) => console.log(meal));
.then(console.log)
.catch(console.log);
// callback-to-promise.js
// Callback Hell example
class UserStorage {
loginUser(id, password) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (
(id === "ellie" && password === "dream") ||
(id === "coder" && password === "academy")
) {
resolve(id);
} else {
reject(new Error("not found"));
}
}, 2000);
});
}
getRoles(user) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (user === "ellie") {
resolve({ name: "ellie", role: "admin" });
} else {
reject(new Error("no access"));
}
}, 1000);
});
}
}
const userStorage = new UserStorage();
const id = prompt("enter your id");
const password = prompt("enter your password");
userStorage //
.loginUser(id, password)
.then(userStorage.getRoles)
.then((user) => alert(`Hello ${user.name}, you have a ${user.role} role`))
.catch(console.log);
반응형
'Programming > JavaScript' 카테고리의 다른 글
[JavaScript]sessionStorage 간단 사용 (0) | 2021.11.25 |
---|---|
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(13/13) (0) | 2021.11.24 |
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(11/13) (0) | 2021.11.10 |
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(10/13) (0) | 2021.11.10 |
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(9/13) (0) | 2021.11.10 |