티스토리 뷰

javascript

[javascript] callback function

tonirr 2020. 11. 18. 04:32
'use strict';

// javascript 는 synchronous.
// 호이스팅이 끝난 후 코드를 실행한다.
// hoisting : var, function declaration
//      모든 함수는 실행될 때 가장 먼저 선언된다.

// Synchronous callback
function printImmediately(print) {
    print();
}

// Asynchronous callback
function printWithDelay(print, timeout) {
    setTimeout(print, timeout);
}

console.log('1');
setTimeout(() => console.log('2'), 1000);
console.log('3');

printImmediately(() => console.log('hello'));
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) {
        console.log(`user: ${user}`);
        setTimeout(() => {
           if(user === 'ellie') {
               onSuccess({name: 'ellie', role: 'admin'});
           } else {
               onError(new Error('no access'));
           } 
        });
    }
}

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}, ${userWithRole.role}`);
            }, (error) => {
                console.log(error);
            }
        );
    },
    error => {console.log(error)}
);
// 콜백지옥의 문제점
//  한눈에 알아보기 어려움
//  에러발생시나 디버깅이 어려움

 

'javascript' 카테고리의 다른 글

[javascript] - async, await, Promise API  (0) 2020.11.21
[javascript] promise  (0) 2020.11.19
[javascript] json  (0) 2020.11.17
[Javascript] Array  (0) 2020.11.09
[javascript] Object  (0) 2020.11.02
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함