-
Callback Hell 탈출Front end/javaScript 2023. 11. 26. 22:42
Callback Hell 을 탈출하기 위해서는 Promise를 사용해야함.
Promise란 CallBack Hell 을 탈출하기 위한 객체다.
- 기존 CallBack 함수
더보기// JavaScript 관련 구글링// 👉 site:developer.mozilla.org {연관_키워드}'use strict';
// 주문하기function orderAPI(doNext) {setTimeout(() => { // 비동기 함수console.log("[주문] 완료!");doNext();}, 1000);}
// 결제하기function paymentAPI(doNext) {setTimeout(() => {console.log("[결제] 완료!");doNext();}, 1000);}// 배달하기function deliveryAPI(doNext) {setTimeout(() => {console.log("[배달] 완료!");doNext();}, 1000);}// 리뷰작성function reviewAPI(doNext) {setTimeout(() => {console.log("[리뷰] 완료!");doNext();}, 1000);}
콜백을 활용한 비동기처리: 콜백 지옥 발생..코드 파악이 어려움: 코드 흐름이 눈에 잘 들어오지 않음orderAPI(() => {paymentAPI(() => {deliveryAPI(() => {reviewAPI(() => {console.log("== END ==");});});});});
2. 프로미스(Promise)- 콜백 지옥을 개선하는 객체- 비동기 처리 흐름을 파악하기 좋음👉 https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise
프로미스 만들기
const promise1 = new Promise((resolve, reject) => {// 비동기 처리setTimeout(() => {if (Math.random() < 0.5){ // 0.5확률보다 작으면 즉 반반 확률resolve("성공");} else {reject("실패");}}, 1000);
});
// console.log(promise1);
// 프로미스 호출// promise.then(성공시_수행할_resolve_콜백)// .catch(실패시_수행할_reject_콜백)// .finally(결과에_상관없이_수행될_콜백);
promise1.then((result) => {console.log(result)}) // 위의 resolve 값을 가져옴 (성공).catch((err) => {console.log(err)}) // 위의 reject 값을 가져옴 (실패).finally(() => {console.log("== 끝 ==")}); // 성공 실패 상관없이 실행- CallBack Hell 탈출을 위해 Promise 함수를 이용하여 개선
더보기// 3. 기존 콜백을 프로미스로 개선하기// - 콜백 지옥은 기존 콜백을 직접호출해서 생김// - 프로미스로 감싸면, 콜백 지옥을 없앨 수 있음
// 주문하기function orderAPI() {return new Promise((resolve, reject) => {setTimeout(() => {if (Math.random() < 0.8) {console.log("[주문] 완료!");resolve();} else {reject("[주문] 실패..");}}, 1000);});}// 결제하기function paymentAPI() {return new Promise((resolve, reject) => {setTimeout(() => {if (Math.random() < 0.8) {console.log("[결제] 완료!");resolve();} else {reject("[결제] 실패..");}}, 1000);});}// 배달하기function deliveryAPI() {return new Promise((resolve, reject) => {setTimeout(() => {if (Math.random() < 0.8) {console.log("[배달] 완료!");resolve();} else {reject("[배달] 실패..");}}, 1000);});}// 리뷰작성function reviewAPI() {return new Promise((resolve, reject) => {setTimeout(() => {if (Math.random() < 0.8) {console.log("[리뷰] 완료!");resolve();} else {reject("[리뷰] 실패..");}}, 1000);});}
orderAPI().then(() => {return paymentAPI()}) // 성공.then(() => {return deliveryAPI()}).then(() => {return reviewAPI()}).catch((err) => {console.log(err)}) // 실패.finally(() => {console.log("== 끝 ==")});출저: 홍팍 (https://www.youtube.com/@hongpark)
이 블로그 기록은 개인 공부용 기록입니다.
'Front end > javaScript' 카테고리의 다른 글
비동기 처리를 위한 async와 await 코드 (2) 2023.11.27 동기 & 비동기 방식 (0) 2023.11.26 API (0) 2023.11.25 DOM & EventHandling (0) 2023.11.24 클래스&객체, 생성자 호출 (2) 2023.11.24