Prac0311
561
2021-02-17 23:37:00
2
125

fetch return 값을 못받아오네요



const x = (q) => {

    fetch("http://credentials": "include") ...


--   중략 


}).then(x=>x.text()).then(x=>{

    

    .. 중략 

    if ( result == 1 ) return true;

    return false;

   });

}


    for (i=0; i<5; i++) {

      if ( x( 1 ) )

        { console.log("return true") } 

    }

}


for 반복문에서 x 호출하면 return 값이 없네요.. undefined 입니다.

물론 if ( result == 1 ) return true;  이거 대신 console.log 찍으면 잘 되긴합니다만 의도한 바는

for에서 x 호출 후 리턴값을 받고 싶습니다.  

0
  • 답변 2

  • rezigrene
    1k
    2021-02-18 01:08:44 작성 2021-02-18 01:33:06 수정됨

    비동기 흐름제어가 익숙치 않으시면 async await 를 사용하시는 것도 방법입니다. 

    다만 그전에 자바스크립트 비동기 함수에대해 자세히 공부해보시는것이 좋겠습니다.

    async function x(q)  {

         const a = await fetch(...);

          const b = a.text();

           ..중략

         return true;

    }

    async function c() {

       if(await x(1)) {

           console.log('!');

       }

    }


    c().then();

  • 피자7
    637
    2021-02-18 09:04:20

    윗분 말대로 비동기가 익숙하지 않으신거 같은데

    질문 의도대로 라면

    const x = ()=>{

      fetch()

    }

    const res=x()


    이런 형태로 x를 호출하면 결과값을 받아오는거인데

    코드에선 x가 fetch를 완료할때까지 기다리는 부분이 없습니다

    x가 끝나기전에 아래에서 콘솔출력을 실행하니 undefined 뜨는거고요


    간단하게 해결하려면 윗분말대로 async await으로 감싸면된는데

    js에서 비동기가 어떤방식으로 동작하는지, 그리고 promise 까지 이해하는걸 추천합니다


  • 로그인을 하시면 답변을 등록할 수 있습니다.