function printImmediately(print) {
print();
}
printImmediately(() => console.log('hello'))
위의 예제는 동기적으로 바로 실행시키는 함수.
function printWithDelay(print, timeout){
setTimeout(print, timeout);
}
printWithDelay(()=> console.log('async callback'), 2000)
class UserStorage {
loginUser(id, password, onSuccess, onError) {
setTimeout(() =>{
if (
(id === 'gyus' && password === '1234') ||
(id === 'coder' && password === 'academy')
) {
onSuccess(id);
} else {
onError(new Error('not found'));
}
}, 2000);
}
getRoles(user, onSuccess, onError) {
setTimeout(() => {
if (user === 'gyus') {
onSuccess({ name: 'gyus', 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}`)
},error => console.log(error))
}, (error) => {
console.log(error)
})
그러므로, 가독성이 떨어져 우리는 비동기적인 방식으로 위 코드를 고쳐야한다.