2017-10-14 169 views
1

fetchspecification指出可讀流Body包含Body.bodyUsed標誌,該標誌初始設置爲false,然後通過調用任何解析方法將其設置爲true爲什麼讀取Body對象只能讀取一次?

下面是一個例子:

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更'爲什麼這種行爲是使用',因爲它很容易讓使用'Response.clone(多次使用)' - HTTPS://開發商.mozilla.org/zh-CN/docs/Web/API/Response/clone –

+1

它需要將主體存儲在'res'對象中。 – Barmar

+0

@JaromandaX是的,但是這並沒有回答下一個邏輯問題:爲什麼要把它限制在第一位,而是實現'clone()'。 –

回答

1

問題是:爲什麼會使用這種行爲?爲什麼不允許解析 可讀數據流多次?

有可能通過使用Response.clone()

+0

是的,我知道這件事。但是這並不能解釋爲什麼要限制最明顯的閱讀方式。 –

+2

@PhilFilippak最簡單的解釋是確定什麼時候Response.body被「耗盡」,但是請注意,這個概念也適用於'Request',並且在一定程度上兼容性和相應的實現與[Streams規範](https:// streams.spec.whatwg.org/),請參閱[建議的向後不兼容的更改:要求克隆所有請求/響應#61](https://github.com/whatwg/fetch/issues/61)。也許考慮提交一個[問題](https://github.com/whatwg/fetch/issues),向作者和貢獻者說明你的具體問題。 – guest271314

+0

隨着流的概念,它現在是有道理的。謝謝你的解釋。你能在你的初步答案中提到Streams,所以我可以檢查它是否被接受? –

相關問題