'use strict'
console.log(1)
setTimeout(()=>console.log(2),1000)
console.log(3)
function printImmediately(print){
print()
}
printImmediately(()=>console.log('hello!'))
function printWithDelay(print, timeout){
setTimeout(print, timeout)
}
printWithDelay(()=>console.log('this is async callback'), 2000)
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('please enter your id')
const password = prompt('please enter your password')
userStorage.loginUser(id, password, (user) =>{
userStorage.getRoles(user, userWithRole=>{
alert(`Hello ${userWithRole.name}, you hava a ${userWithRole.role}`)
}, error =>{})
}, (error)=>{console.log(error)})