Nuke Olaf - Log Store
JavaScript - XMLHttpRequest 로 return 값 받기 위해 promise 사용하기 본문
Language/[PHP]
JavaScript - XMLHttpRequest 로 return 값 받기 위해 promise 사용하기
NukeOlaf 2020. 2. 11. 15:42XMLHttpRequest 의 onload() 를 통해 받은 값을 아래와 같이 return 하고 싶었다.
let getData = () => {
let xhr = new XMLHttpRequest;
xhr.open('POST', url, true);
// 통신이 완료되어 데이터를 다 받아온 경우, 실행된다
xhr.onload = () => {
// status 는 HTTP 통신의 결과를 의미하며, 200 은 통신이 성공했다는 의미
if (xhr.status == 200) {
let result = xhr.response;
return result;
} else {
alert("ERROR LOADING FILE!" + this.status);
}
};
xhr.send();
}
function showData = () => {
let result = getData();
console.log(result);
}
그러나, Ajax 요청은 비동기적이기 때문에, 내가 원하는 값을 return 하기 전에 코드가 종료되어
getData() 함수가 undefined 를 리턴하는 문제가 있었다.
이것의 해결방법에 대해 찾아보니, promise 라는 것을 사용해서 해결할 수 있다고 한다.
아래와 같이 수정하니, getData() 함수로부터 값을 반환받을 수 있었다.
Promise 에 대해 아직 제대로 공부하지 못해서 어떻게 동작하는지 더 찾아봐야할 것 같다.
let getData = () => {
return new Promise((resolve, reject) => {
let xhr = new XMLHttpRequest;
xhr.open('POST', url, true);
// 통신이 완료되어 데이터를 다 받아온 경우, 실행된다
xhr.onload = () => {
// status 는 HTTP 통신의 결과를 의미하며, 200 은 통신이 성공했다는 의미
if (xhr.status == 200) {
let result = xhr.response;
result = JSON.parse(result); // JSON 타입으로 파싱해준다
resolve(result); // Promise 로 결과값을 반환해준다
} else {
alert("ERROR LOADING FILE!" + this.status);
}
};
xhr.send();
});
}
function showData = () => {
let result;
getProjectList()
.then( data => {
result = data;
console.log("결과 값" + result);
})
}
참고 사이트 >>>
'Language > [PHP]' 카테고리의 다른 글
MySQL 에 BLOB으로 이미지 저장하기 (0) | 2020.02.11 |
---|---|
HTML 페이지가 모두 로드되었을때, js 함수 자동 구현하기 (0) | 2020.02.11 |
PHP 파일을 모듈화하기 - require, include (0) | 2020.02.11 |
Ajax 와 XmlHttpRequest (0) | 2020.02.10 |
크롬에서 HTTP 헤더 보는 법 (1) | 2020.02.10 |
Comments