[JavaScript] 비동기 처리의시작 콜백이해하기, 콜백 지옥체험

작성자
진행일시
이메일

1. [ 비동기 처리의 시작 , 콜백이해하기, 콜백 지옥체험 !! ]

'use strict'; // JavaScript is synchronous // Excute the code block in order after hoistiong //(호이스팅이 된 이후부터 코드가 우리가 작성한 순서부터 하나하나씩 동기적으로 실행!) // hoistiong : var, function declaration 같은 선언들이 제일 위로 올라가는것 console.log('1'); //callback 함수 //setTimeout함수안에 하나의 파라미터 인자로 우리가 지정한 함수를 전달 -> 지금당장실행안하고 1초뒤에 실행해줘! // 그래서 CallBack함수 setTimeout(function () { console.log('7'); }, 1000); // Arrow function으로 쓸 수 있다. setTimeout(()=>console.log('8'),200) console.log('2'); console.log('3'); // callback도 2가지 경우로 나누어진다. // 1. Synchronous callback // 함수를 선언해줫으므로 실제 실행단계에서는 hoisting이되어서 맨위로 올라간다 function printImmediately(print) { print(); } printImmediately(()=> console.log('hello')); // 2. Asynchronous callback function printWithDelay(print, timeout){ setTimeout(print, timeout); } printWithDelay(()=>console.log('async callback'), 5000); // Callback Hell example class UserStorage { //사용자로그인 // id, password를 받아오고 로그인이 정상적으로 되었다면 onSuccess라는callback함수를 사용자데이터와 함께 호출 , // 실패했다면 onError라는 callback함수 호출 loginUser(id, password, onSuccess, onError){ setTimeout(()=>{ if( (id === 'ellie' && password === 'dream') || (id === 'coder' && password === 'academy') ){ onSuccess(id); } else{ onError(new Error('not Found')); } },2000); } // 사용자 데이터를 담아서 권한들을 서버에게 다시요청하고 받아오는 api 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('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. 가독성이 떨어짐 //2. 비즈니스 로직을 한눈에 이해하기 어려움 //3. 에러발생할 때 debugging할떄 어려움 ㅠㅠ //4. 유지보수도 어려워!! // 그래서 콜백지옥!!!!!!!
JavaScript
복사