728x90
11. 비동기 처리의 시작 콜백 이해하기, 콜백 지옥 체험 😱 JavaScript Callback | 프론트엔드 개발자 입문편 (JavaScript ES6)
"use strict";
// JavaScript is synchronous.
// Execute the code block in order after hoisting.
// hoisting: var, function declaration // 변수나 함수를 제일 위로 끌어올려 주는 것
console.log("1"); // 동기
// setTimeout(function () {
// console.log("2");
// }, 1000);
setTimeout(() => console.log("2"), 1000); // 비동기
console.log("3"); // 동기
// Synchronous callback
function printImmediately(print) {
print();
}
printImmediately(() => console.log("hello")); // 동기
// Asynchronous callback
function printWithDelay(print, timeout) {
setTimeout(print, timeout);
}
printWithDelay(() => console.log("async callback"), 2000); // 비동기
// Callback Hell example
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(() => {
if (
(id === "ellie" && password === "dream") ||
(id === "coder" && password === "academy")
) {
onSuccess(id);
} else {
onError(new Error("not found"));
}
}, 2000);
}
getRoles(user, onSuccess, onError) {
setTimeout(() => {
if (user === "ellie") {
onSuccess({ name: "ellie", role: "admin" });
} else {
onError(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,
(user) => {
userStorage.getRoles(
user,
(userWithRoles) => {
alert(
`Hello ${userWithRoles.name}, you have a ${userWithRoles.role} role`
);
},
(error) => {
console.log(error);
}
);
},
(error) => console.log(error)
);
반응형
'Programming > JavaScript' 카테고리의 다른 글
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(13/13) (0) | 2021.11.24 |
---|---|
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(12/13) (0) | 2021.11.24 |
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(10/13) (0) | 2021.11.10 |
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(9/13) (0) | 2021.11.10 |
[Javascript][Lecture][드림코딩]자바스크립트 기초 강의(ES5+)(8/13) (0) | 2021.11.08 |