fetch() 를 함수로 만들 때 콜백처리 방법?

fetch() 를 함수로 만들 때 콜백처리 방법?

QA

fetch() 를 함수로 만들 때 콜백처리 방법?

본문

서버의 question.php 에 POST로 데이터를 보내고, 처리된 결과를 answer 로 받으려고 합니다.

fetch() 사용을 함수로 만들어서 사용하고 싶은데 문제가 발생하네요.

 

아래 (2) 번 자리를 alert(result) 로 하면 결과값이 잘 나타납니다.
그런데 이 결과값을 받으려고 여기를 return result; 로 해서 (1) 번에서 받으려고 하면 [object Promise] 로 나타나네요.

 

원하는 것은 (1)번 alert 에서도 (2)을 alert 와 같은 내용이 나와야 합니다.
느낌에 비동기여서 결과값을 받기도 전에 return 해서 그런거 아닐까??... 생각드는데 어떻게 해야할지 모르겠네요..

 


<script>
let data = 'no=123&name=홍길동';
let answer = fetchPost('question.php',data);
alert(answer); //-- (1)
 
async function fetchPost(url, data) {
    let response = await fetch(url, {method:'POST', 
        headers: {'Content-Type':'application/x-www-form-urlencoded'},
        body: data});
    if (response.ok) {
      let result = await response.text();
      return result; //-- (2) alert(result);
    }else{
      alert('HTTP-Error: '+ response.status);
    }
}
</script>

 

이 질문에 댓글 쓰기 :

답변 2

async await도 내부적으로는 promise 객체로 리턴되고 활용됩니다
다만 catch then보다는 그냥 await async로 쓰는게 코드 짜기도 편하기에 지원되는 기능입니다
해당 객체를 async 영역으로 감싸져있지 않은곳에서 받으면 promise 객체로 받을 수 밖에 없습니다
전역, 루트에서는 async를 쓸 수 없기 때문에

<script>

(async()=>{

let data = 'no=123&name=홍길동';
let answer = await fetchPost('question.php',data);
alert(answer); //-- (1)

})()
</script>

이런식으로 활용하세요.



async function fetchPost(url, data) {
    let response = await fetch(url, {method:'POST', 
        headers: {
            'Content-Type':'application/x-www-form-urlencoded'
        },
            body: data
        }
     )
     .then(res => res.json())
     .catch(e => console.log(e))
}

 

답변을 작성하시기 전에 로그인 해주세요.
전체 2,662
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT