2017-10-14 13 views
1

fetchspecification可読ストリームBodyが最初falseに設定され、その後、任意の解析方法の呼び出しでtrueに設定されているBody.bodyUsedフラグが含まれていることを述べています。ここでボディオブジェクトをフェッチするのはなぜ1回だけ可能ですか?

は例です:

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

もう一度res.json()またはres.text()のようなメソッドを呼び出そうとした場合、例外がスローされます。

質問はです:その動作が使用される理由は?その読み込み可能なストリームを何度も何度も解析できるようにするのはなぜですか?私はその事柄について何の説明も見つけなかった。

PS。 Chrome(およびその他のブラウザ)では、このフラグにはres.body.lockedという名前でアクセスできます。

+1

を使って何度もResponse.body多くを読み取ることが可能です - https://で開発.mozilla.org/ja-JP/docs/Web/API/Response/clone –

+1

ボディは 'res'オブジェクトに格納する必要があります。 – Barmar

+0

@ JaromandaXはい、それは次の論理的な質問に答えることができません。なぜそれを最初に制限し、代わりに 'clone()'を実装するのですか? –

答えて

1

質問は、なぜその動作が使用されるのですか?なぜパーシングを許可しないのですか 可読なストリームを何度も何度も望みます? ?

`なぜその行動が使用されている`、それは `Response.cloneを(使用して複数の使用を許可するのは簡単ですので)` Response.clone()

+0

はい、私はこれについて知っています。しかし、それはなぜそれを読むために最も明白な方法を制限するのか説明していません。 –

+2

@PhilFilippak最も簡単な説明は、 'Request.'が「ドレイン」されたときを特定することです。ただし、概念は' Request'にも適用され、ある程度互換性があり、[Streams specification](https:// (下位互換性のない変更を提案しました:すべての要求/応答のクローニングが必要です)#61(https://github.com/whatwg/fetch/issues/61)を参照してください。おそらく、[issue](https://github.com/whatwg/fetch/issues)を書いて、あなたの具体的な問い合わせを明確にするために、著者と投稿者に仕様を尋ねることを検討してください。 – guest271314

+0

Streamsというコンセプトで、今や理にかなっています。ご説明ありがとうございます。最初の答えでStreamsに言及してください、それで、私は受け入れられたとしてそれを確認することができますか? –

関連する問題