2017-10-14 25 views
1

fetchspecification은 읽을 수있는 스트림 Body이 처음에는 false으로 설정된 Body.bodyUsed 플래그를 포함하고 있으며 모든 구문 분석 방법을 호출하여 true으로 설정되어 있다고 명시합니다. Body 객체를 가져 오는 것이 왜 한 번 밖에 읽을 수 없습니까?

fetch('/some/path', (res) => { 
    // res.body.bodyUsed === false 
    res.json(); 
    // res.body.bodyUsed === true 
}); 

다시 한 번 res.json() 또는 res.text() 같은 메소드를 호출하려고하면

는, 예외가 발생 :

다음은 예입니다.

질문은 : 왜 그 동작이 사용됩니까? 왜 읽을 수있는 스트림을 원하는만큼 여러 번 파싱 할 수 있습니까? 나는 그 문제에 대해 아무런 설명도 찾지 못했다.

추신. Chrome (및 다른 브라우저)에서이 플래그는 res.body.locked으로 액세스 할 수 있습니다.

+1

를 사용하여 한 번 이상 Response.body 자세한 내용을보실 수 있습니다 - https : //로 개발 .mozilla.org/kor-US/docs/Web/API/Response/clone –

+1

본문이'res' 개체에 저장되어 있어야합니다. – Barmar

+0

@ JaromandaX 예,하지만 다음 논리적 인 질문에 답을주지 못합니다 : 왜 처음에 그것을 제한하고 대신에'clone()'을 구현해야합니다. –

답변

1

질문 : 그 동작이 사용되는 이유는 무엇입니까? 왜 파싱을 허용하지 않는가? 읽을 수있는 스트림을 원하는만큼 여러 번 사용할 수 있습니까? ?

이`왜 행동이 사용된다`는`Response.clone를 (사용하여 여러 사용을 허용하기 쉽기 때문)`Response.clone()

+0

예, 이것에 대해 알고 있습니다. 그러나 그것은 왜 그것을 읽는 가장 분명한 방법을 제한하는지 설명하지 못합니다. –

+2

@PhilFilippak 가장 단순한 설명은'Request.'가 "배수"되는 시점을 확인하는 것입니다. 개념은 또한 Request와 어느 정도 호환성 및 해당 구현을 [Streams specification] (https : // (backward-compatible) 변경 : 모든 요청/응답 복제 요구 # 61] (https://github.com/whatwg/fetch/issues/61)를 참조하십시오. 특정 질문에 대한 명확한 설명을 위해 저자 및 작성자에게 사양을 묻는 [문제] (https://github.com/whatwg/fetch/issues)를 제출하는 것이 좋습니다. – guest271314

+0

Streams의 개념으로 이제는 의미가 있습니다. 설명해 주셔서 감사합니다. 초기 답변에서 스트림을 언급 해 주시겠습니까? –