반응형
출처. https://www.youtube.com/watch?v=s1vpVCrT8f4
callback 지옥이라서 호출 스택이 많이 쌓여서 지옥인가? 했는데
프로그래머에게 지옥의 의미는
유지, 보수, 수정이었다.
error가 나는 부분이나, parameter를 가지고 와서 어디서 어떻게 쓰이는지 정말 보기 어려우니 지옥이였구나...
다음 편 promise를 어떻게 쓰는지가 중요할 것 같다.
'use strict';
// hoisting
// Synchronous callback
function printImmediately(print) {
print();
}
// Asynchronous callback
function printWithDelay(print, timeout) {
setTimeout(print, timeout);
}
// JavaScript is synchronous.
// Execute the code block in order after hoisting.
// hoisting: var, function declaration
// callback ex
console.log('1'); //동기
setTimeout(() => console.log('2'), 1000); //비동기
console.log('3'); //동기
printImmediately(() => console.log('Sync')); //동기
printWithDelay(() => console.log('Async'), 2000); //비동기
// Callback Hell example
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(() => {
if (
(id === 'CJM' && password === 'cjm') ||
(id === 'abc' && password === 'abc')
) {
onSuccess(id);
} else {
onError(new Error('not found'));
}
}, 2000);
}
getRoles(user, onSuccess, onError) {
setTimeout(() => {
if (user === 'CJM') {
onSuccess({ name: 'CJM', 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,
userWithRole => {
alert(`Hello ${userWithRole.name}, you have a ${userWithRole.role} role`);
},
error => {
console.log(error);
}
)
},
error => {
console.log(error);
}
);
덩굴처럼 엮여서 꼬리를 문 형태로 코드를 짜지 말자!
'Study & Project ✏️ > JavaScript 🐥' 카테고리의 다른 글
JS async,await 입문! (0) | 2022.01.04 |
---|---|
JS Promise 입문! (0) | 2022.01.04 |
JS JSON 입문! (0) | 2021.12.28 |
JS 배열 API 공부 (0) | 2021.12.27 |
JS array 입문! (0) | 2021.12.25 |