callback함수의 정의와 쓰임에대해서 공부했는데 callback함수의 단점에대해 알게되었다. callback지옥!!! 그리고 이 단점을 극복시켜주는 것이 promise라는것을 알게되었다. 그리고 이 promise의 단점도 있는데 이를 해결해주는것은 다음글에 올리겠다.
callback함수가 뭐야?
함수를 호출하고 전달인자에 문자열,숫자열,배열,객체등 다양한 데이터를 넣을 수 있는데 함수또한 넣을 수 있다.
이때 인자로서 들어가는 함수를 callback함수라고 한다.
이callback 함수는 언제 어떻게 쓰이는가? 예를 살펴보며 알아보자.
const myCallback = () => {
//XMLHttpRequest 객체를 생성합니다.
const aa = new XMLHttpRequest();
//HTTP 요청 초가화하는 open메서드를 호출하여 HTTP요청 메서드(get)와 url을 작성합니다.
aa.open("get", "http://numbersapi.com/random?min=1&max=200");
//HTTP 요청을 전송합니다.
aa.send();
//addEventListener 함수안에 웹페이지에서 사용할 모든 파일의 다운로드가 완료되었을때 발생시킬 load 이벤트를 등록시킵니다.
//그 다음 실행될 callback함수를 작성합니다.
aa.addEventListener("load", (res) => {
console.log("데이터가 로드되면 이거 실행시켜줘");
console.log(res);
console.log(res.target);
const num = res.target.response.split(" ")[0];
const bb = new XMLHttpRequest();
//num에 담긴 변수 값을 이용하여 게시글 조회 요청을 합니다.
bb.open("get", `https://koreanjson.com/posts/${num}`);
bb.send();
bb.addEventListener("load", (res) => {
console.log("두번째는 이거 실행시켜줘");
console.log(res);
console.log(res.target.response);
console.log(JSON.parse(res.target.response));
console.log(JSON.parse(res.target.response).title);
//받아온 데이터의 userid값을 가져와 userId라는 변수에 담아줍니다.
const userId = JSON.parse(res.target.response).UserId;
const cc = new XMLHttpRequest();
// userId에 담긴 값을 이용하여, 동일한 유저(작성자)가 쓴 게시글 조회를 요청합니다.
cc.open("get", `http://koreanjson.com/posts?userId=${userId}`);
cc.send();
cc.addEventListener("load", (res) => {
console.log("마지막으로 이거 실해시켜줘");
console.log(res.target.response);
});
});
});
};
대상 함수가 뭐지?? 뭘 말하는걸까? 대상함수가 현재 로직을 작성하고 있는 함수를 말하는것인가?
실행시키고 싶은 로직을 대상 함수에 보내줄수 있다고.
1. 대상 함수 안에서 실행시키고 싶은 로직(함수)를 내가 작성해서 대상 함수로 보내줄 수 있습니다.
2. 대상 함수로부터 받아온 값을 인자로 처리 가능합니다.