고슴맨쉬
망치와 공(空)
고슴맨쉬
  • 분류 전체보기 (155)
    • 💡 UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • 개념 (42)
      • 정리 (2)
      • 문제풀기 (프로그래머스, 코딩애플) (15)
      • 응용하여 자동화or문제해결하기 (2)
      • 기타 (5)
    • ⚛️ React (49)
      • 개념 (27)
      • 개념(Redux) (3)
      • 정리 (4)
      • 문제풀기 (코딩애플: React) (15)
    • 📘 TypeScript (10)
      • 개념 (8)
      • 문제풀기 (코딩애플) (2)
    • 🌐 HTML,CSS (18)
      • 실무에서 자주 발생한 오류들 (10)
      • 뒤늦게 알아서 뼈아픈 유용한 CSS (6)
      • 기타 자주 쓰는 CSS (2)
    • 💻 CS (8)
      • CS (5)
      • 정규표현식 (2)
      • Git,Github (1)

태그

  • state
  • TypeScript
  • 오류
  • axios
  • JavaScript
  • CS
  • Props
  • react
  • json
  • class
  • object
  • array
  • useEffect
  • 코딩애플
  • CSS
  • UXUI
  • Ajax
  • 삼항연산자
  • 프로그래머스
  • redux
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
고슴맨쉬

망치와 공(空)

🟨 JavaScript/개념

[드림코딩] 콜백함수 (1) : 콜백지옥 예시

2022. 7. 22. 14:11

콜백지옥

// 기본세팅
class UserStorage {
  loginUser(id, password, onSuccess, onError) {
    setTimeout(() => {
      if (
        (id === 'master' && password === 'master00') ||
        (id === 'submaster' && password === 'submaster00')
      ) {
        onSuccess(id);
      } else {
        onError(new Error('not found'));
      }
    }, 2000);
  }
  
  getRoles(user, onSucces, onError) {
    setTimeout(() => {
      if (user === 'master') {
        onSuccess({name: 'Master', role : 'admin'});
      } else {
        onError(new Error('Go away!'));
      }
    }, 1000);
  }
}

좋지 않은 콜백지옥 예시

(id와 password를 검사해서 id가 master일 경우 admin role을 부여하는 코드이다.)

//콜백지옥
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);
  }
);

문제점

  1. 가독성이 떨어진다. (logic을 알아보기 힘들다)
  2. 에러가 발생했을 시 디버깅하기 어렵다.

출처 : 드림코딩 https://www.youtube.com/@dream-coding / MDN https://developer.mozilla.org/ko/

저작자표시 비영리 동일조건 (새창열림)

'🟨 JavaScript > 개념' 카테고리의 다른 글

[드림코딩] 콜백함수 (3) : promise로 Error Handling하기 (reject, catch 활용)  (0) 2022.10.04
[드림코딩] 콜백함수 (2) : 콜백지옥 탈출, Promise (State, Producing)  (0) 2022.07.22
[mdn, 드림코딩, 코딩애플] 콜백함수 (1) : 동기와 비동기 개념  (0) 2022.07.12
[드림코딩] JSON to Object (parse)  (0) 2022.07.12
[드림코딩] Object to JSON (stringify)  (0) 2022.06.29
    '🟨 JavaScript/개념' 카테고리의 다른 글
    • [드림코딩] 콜백함수 (3) : promise로 Error Handling하기 (reject, catch 활용)
    • [드림코딩] 콜백함수 (2) : 콜백지옥 탈출, Promise (State, Producing)
    • [mdn, 드림코딩, 코딩애플] 콜백함수 (1) : 동기와 비동기 개념
    • [드림코딩] JSON to Object (parse)
    고슴맨쉬
    고슴맨쉬
    부수되 집착하지 않고, 이해하되 머무르지 않기

    티스토리툴바