
콜백 지옥 예방 방법
1. 모듈화
function getData(callback) {
// 데이터를 비동기적으로 가져오는 코드
setTimeout(() => {
callback(null, '첫 번째 데이터');
}, 1000);
}
function getMoreData(input, callback) {
// 또 다른 데이터를 비동기적으로 가져오는 코드
setTimeout(() => {
callback(null, `${input} + 두 번째 데이터`);
}, 1000);
}
function getFinalData(input, callback) {
// 최종 데이터를 비동기적으로 가져오는 코드
setTimeout(() => {
callback(null, `${input} + 최종 데이터`);
}, 1000);
}
// 사용 예
getData(function(err, result) {
if (err) {
console.error(err);
} else {
getMoreData(result, function(err, result) {
if (err) {
console.error(err);
} else {
getFinalData(result, function(err, result) {
if (err) {
console.error(err);
} else {
console.log(result); // "첫 번째 데이터 + 두 번째 데이터 + 최종 데이터"
}
});
}
});
}
});
예시) 모듈을 사용한 경우
function getData() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve('첫 번째 데이터');
}, 1000);
});
}
function getMoreData(input) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`${input} + 두 번째 데이터`);
}, 1000);
});
}
function getFinalData(input) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve(`${input} + 최종 데이터`);
}, 1000);
});
}
// 사용 예
getData()
.then(getMoreData)
.then(getFinalData)
.then(console.log) // "첫 번째 데이터 + 두 번째 데이터 + 최종 데이터"
.catch(console.error);
getData()
.then(getMoreData)
.then(getMoreData)
.then(function(c) {
console.log(c);
})
.catch(function(error) {
console.error(error);
});
async function asyncFunction() {
try {
const a = await getData();
const b = await getMoreData(a);
const c = await getMoreData(b);
console.log(c);
} catch (error) {
console.error(error);
}
}DOM의 기본 개념
DOM접근 및 제어 방법
DOM 요소 접근 방법
var element = document.getElementById("example");
var elements = document.getElementsByClassName("example-class");
var elements = document.getElementsByTagName("div");
var element = document.querySelector(".example-class");
var elements = document.querySelectorAll("div.example-class");
DOM 요소 제어 방법
element.textContent = "새로운 텍스트";
element.innerHTML = "<span>새로운 HTML</span>";element.style.color = "red";
element.style.display = "none"; // 요소를 숨깁니다.element.setAttribute("href", "https://www.example.com");
element.removeAttribute("href");element.addEventListener("click", function() {
alert("클릭됨!");
});