728x90
์ฃผ์์ ์ฝ๋ฐฑ ์ง์ฅ ์์
// class UserStorage {
// loginUser(id, password, onSuccess, onFailure) {
// setTimeout(() => {
// if (
// (id === "ํ๊ธธ๋" && password === "์๋ฒ์ง") ||
// (id === "ํฉ์ง์ด" && password === "์ฒญ์ฐ๋ฆฌ")
// ) {
// onSuccess(id);
// } else {
// onFailure(new Error("not found"));
// }
// }, 2000);
// }
// getRoles(user, onSuccess, onFailure) {
// setTimeout(() => {
// if (user === "ํ๊ธธ๋") {
// onSuccess({
// name: "ํ๊ธธ๋",
// role: "์๋ฒ์ง๋ฅผ ์๋ฒ์ง๋ผ ๋ถ๋ฅด์ง๋ ๋ชปํ๊ณ ...",
// });
// } else {
// onFailure(new Error("no access!!!"));
// }
// }, 3000);
// }
// }
// const userStorage = new UserStorage();
// const id = prompt("๋์ ์ด๋ฆ์");
// const password = prompt("๋น๋ฐ๋ฒํธ๋?");
// userStorage.loginUser(
// id,
// password,
// (user) => {
// userStorage.getRoles(
// user,
// (userWithRole) => {
// alert(`Hello ${userWithRole.name}, ๋์ ๋ช
๋์ฌ ${userWithRole.role}`);
// },
// (error) => {
// console.log(error);
// }
// );
// },
// (error) => {
// console.log(error);
// }
// );
// 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 something...");
setTimeout(() => {
resolve("๋ด๊ฐ๋ฐ๋ก๋ค์ด์จ๊ฐ");
}, 2000);
});
// 2. Consumers : then, catch, finally
promise
.then((value) => {
console.log(value);
})
.catch((error) => {
console.log(error);
})
.finally(() => {
console.log("finally");
});
% node index.js
doing something...
๋ด๊ฐ๋ฐ๋ก๋ค์ด์จ๊ฐ
then์ ํ๋ก๋ฏธ์ค๊ฐ ์ ์ํ๋์ด์ ์ต์ข ์ ์ผ๋ก
resolve๋ผ๋ ์ฝ๋ฐฑํจ์๋ฅผ ํตํด์ ์ ๋ฌํ ๊ฐ์ด value ํ๋ผ๋ฏธํฐ๋ก ์ ๋ฌ๋์ด์ ธ์ ๋ค์ด์ค๋ ๊ฒ์ ๋ณผ ์๊ฐ ์๋ค.
// 2. Consumers : then, catch, finally
promise.then((value) => {
console.log(value);
});
<ํ๋ก๋ฏธ์ค ์ฒด์ด๋>
//3.promise chaining
const fetchNumber = new Promise((resolve, reject) => {
setTimeout(() => resolve(1), 1000); //1
});
fetchNumber
.then((number) => number * 2) //2
.then((number) => number * 3) //6
.then((number) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(number - 1), 1000);
}); //5
})
.then((number) => console.log(number)); //5
//4.Error Handling
const getHen = () =>
new Promise((resolve, reject) => {
setTimeout(() => resolve("๋ญ"), 4000);
});
const getEgg = (hen) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${hen}=>egg`), 4000);
});
const cook = (egg) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${egg}=>ํ๋ผ์ด`), 4000);
});
getHen()
.then((hen) => getEgg(hen))
.then((egg) => cook(egg))
.then((meal) => console.log(meal));
๋ญ=>egg=>ํ๋ผ์ด
//4.Error Handling
const getHen = () =>
new Promise((resolve, reject) => {
setTimeout(() => resolve("๋ญ"), 4000);
});
const getEgg = (hen) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${hen}=>egg`), 4000);
});
const cook = (egg) =>
new Promise((resolve, reject) => {
setTimeout(() => resolve(`${egg}=>ํ๋ผ์ด`), 4000);
});
getHen().then(getEgg).then(cook).then(console.log);
getHen() //
.then(getEgg)
.then(cook)
.then(console.log)
.catch(console.log);
์ฝ๋ฐฑ ์ง์ฅ์ ํ๋ก๋ฏธ์ค๋ก ๋ณ๊ฒฝ!
class UserStorage {
loginUser(id, password) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (
(id === "ํ๊ธธ๋" && password === "์๋ฒ์ง") ||
(id === "ํฉ์ง์ด" && password === "์ฒญ์ฐ๋ฆฌ")
) {
resolve(id);
} else {
reject(new Error("not found"));
}
}, 2000);
});
}
getRoles(user) {
return new Promise((resolve, reject) => {
setTimeout(() => {
if (user === "ํ๊ธธ๋") {
resolve({
name: "ํ๊ธธ๋",
role: "์๋ฒ์ง๋ฅผ ์๋ฒ์ง๋ผ ๋ถ๋ฅด์ง๋ ๋ชปํ๊ณ ...",
});
} else {
reject(new Error("no access!!!"));
}
}, 3000);
});
}
}
const userStorage = new UserStorage();
const id = prompt("๋์ ์ด๋ฆ์");
const password = prompt("๋น๋ฐ๋ฒํธ๋?");
userStorage //
.loginUser(id, password)
.then(userStorage.getRoles)
.then((user) => alert(`Hello ${user.name}, ๋์ ๋ช
๋์ฌ ${user.role}`))
.catch(console.log);
728x90
'Javascript > Javascript' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
generate random id ์ ๋ํ ๊นํ๋ธ ๋ต๋ณ (0) | 2022.04.17 |
---|---|
์๋ฐ์คํฌ๋ฆฝํธ ๋ฐ๋ณต๋ฌธ (0) | 2022.04.14 |
[๋๋ฆผ์ฝ๋ฉ ์๋ฐ์คํฌ๋ฆฝํธ]๋น๋๊ธฐ์ ์์ ์ฝ๋ฐฑ์ง์ฅ (0) | 2022.04.13 |
[์๋ฐ์คํฌ๋ฆฝํธ ์ค๊ธ] call, apply, bind (0) | 2022.03.28 |
[๊ธฐ์ด ์๋ฐ์คํฌ๋ฆฝํธ] ๋๋ฆผ์ฝ๋ฉ by ์๋ฆฌ๋ ์๋ฐ์คํฌ๋ฆฝํธ ๊ธฐ์ด ๊ฐ์ (ES5+) ์๋ฆฌ์ฆ ์ ์ฃผํ ๊ธฐ๋ก (0) | 2022.03.25 |