반응형
// Sync → 순차적인 실행
function sync(){
    console.log('sync callback');
    console.log('1');
    console.log('2');
    console.log('3');
    // 1 → 2 → 3
}

// Async → 순차적이지 않은 실행 (분산 처리로 속도가 빠르지만 언제 값이 내려올지 몰라 대응하기 어려움)
function async(){
    console.log('sync callback');
    console.log('1');
    setTimeout(() => console.log('2'), 1000);
    console.log('3');
    // 1 → 3 → 2
}

sync();
async();

 

 

// Callback Hell (Callback Method call Callback Method) 
// → callback 함수를 남발하여 안에 내용이 보기 힘들어진 것
class UserStorage {
    loginUser(id, password, onSuccess, onError){
        setTimeout(() => {
            if (id === 'ellie' && password === 'dream')
                onSuccess(id); // id 파라미터 값을 넘겨준다.
            else
                onError(new Error('not found')); // not found라는 에러메세지를 넘겨준다
        }, 2000);
    }

    getRoles(user, onSuccess, onError){
        setTimeout(() => {
            if (user === 'ellie')
                onSuccess()
            else
                onError(new Error('no access'));
        }, 1000);
    }
}

const userStorage = new UserStorage();
const id = 'ellie';
const password = 'dream';
userStorage.loginUser(
    id,
    password,
    success => {
        userStorage.getRoles(
            id, 
            success => console.log(`Hello ${id}`) ,
            error => console.log(error)
        )
    },
    error => console.log(error)
)

// id가 ellie 이고 password가 dream인 걸 서버에서 확인(서버 통신시간 2초라고 가정)
// 그 이후에 올바른 경우 onSuccess가 작동하고 그렇지 않으면 onError가 작동한다.
반응형