공청
개발하는 금융인
공청
전체 방문자
오늘
어제
  • 분류 전체보기 (102)
    • 개인적인 이야기 (27)
    • IT에 관한 글 (15)
    • 경제, 금융 (12)
    • Python (2)
    • Javascript (6)
    • golang (2)
    • 비전공자를 위한 IT 지식 (0)
    • SQL (SQLD,SQLP) (1)
    • React (Front-end) (29)
    • 정보처리기사 (0)
    • Typescript (4)
    • (study) 모던 자바스크립트 Deep Dive (0)

블로그 메뉴

  • 홈
  • 태그
  • 미디어로그
  • 방명록
  • 글쓰기

공지사항

인기 글

태그

  • react
  • Effective Typescript
  • vite
  • go
  • 일기
  • 인터넷
  • sql
  • Fira Code
  • HTTP
  • 기술스택
  • next.js
  • 언섹시비즈니스
  • react-router
  • Golang
  • 짧은생각
  • 조건부렌더링
  • 트래블월렛
  • vscode
  • 웹개발
  • python
  • 미국주식
  • ChatGPT
  • WSGI
  • 창업
  • 프로그래밍
  • useref
  • 트래블카드
  • approute
  • typescript
  • javascript

최근 댓글

최근 글

티스토리

반응형
공청

개발하는 금융인

fetch()의 response.json()은 왜 Promise를 리턴하는 걸까?
카테고리 없음

fetch()의 response.json()은 왜 Promise를 리턴하는 걸까?

2022. 2. 7. 23:39

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."

"블로그 내의 광고와 쿠팡 링크를 클릭해주시면 블로그 운영에 큰 힘이 됩니다."

반응형

세줄 요약 : 

1. 우리가 받은 Response 객체는 완전한게 아니다. 아직 데이터를 받는 중인 것이기에 Promise를 반환

2. 그래서 다 받고 난 뒤에 온전한 Response 객체상태에서 작업을 하는 것이다.

3. 그게 싫으면 await으로 기다린 이후에 .json()을 출력하면 된다.

 

 

 

생활코딩의 Javascript Promise를 보다가 개운치 않은 점이 있었다.

 

왜 Response 객체에 .json() 메서드를 실행했는데 Promise를 반환하는 걸까?

 

fetch('https://jsonplaceholder.typicode.com/posts')
.then(res => {
	  return res.json()    // 여기서 Promise 객체가 나온다
      })
.catch(reason => {
	   console.log('reason >>', reason)
      })
.then(data => {
	   console.log('data >> ', data)    // 나온 객체를 출력한다.
      })

왜 도대체 res.json()은 Promise 객체를 반환하는 걸까?

 

이유는 간단하다.

 

그게 Promise의 작동 방식이기 때문이다.

 

무슨 말이냐면, fetch를 한 후에 날아오는 response 객체는 모든 header가 도착하자마자 우리에게 주어진다.

 

그 이야기는 무슨 말이냐면 아직 body가 안왔다는 것이다. ( 머리가 잘린 몸이 나중에 온다 ㄷㄷ)

 

그렇기 때문에 현재 자바스크립트는 해당 body 값을 '기다리고 있는 상태'인 Promise 객체를 반환하는 것이다.

 

중간에 기다려서 Promise 객체가 다 끝난 상태를 받고 싶지만 그건 불가능하다.

애초에 Promise를 바로 리턴해버리기 때문에 .then으로 chaining하여 실행해야한다.

 

 

 


참고하면 좋은 글 :

https://stackoverflow.com/questions/37555031/why-does-json-return-a-promise

 

Why does .json() return a promise?

I've been messing around with the fetch() api recently, and noticed something which was a bit quirky. let url = "http://jsonplaceholder.typicode.com/posts/6"; let iterator = fetch(url); iterato...

stackoverflow.com

 

반응형
    공청
    공청
    투자, 프로그래밍, IT에 대한 글을 씁니다.

    티스토리툴바