为什么 fetch Body 对象只能读取一次?

Phi*_*pak 7 javascript standards specifications fetch fetch-api

fetch 说明书指出,可读流Body包含Body.bodyUsed其最初被设置为标志false,然后被设置为true与任何解析方法的调用。

下面是一个例子:

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

如果您尝试再次调用类似res.json()或的方法res.text(),则会引发异常。

问题是:为什么要使用这种行为?为什么不允许根据需要多次解析该可读流?我没有找到对此事的解释。

附注。在 Chrome(也可能是其他浏览器)中,该标志可以作为res.body.locked.

gue*_*314 7

问题是:为什么要使用这种行为?为什么不允许根据需要多次解析该可读流?

可以Response.body通过使用多次读取Response.clone()

  • 是的,我知道这一点。但这并不能解释为什么要限制最明显的阅读方式。 (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),询问规范的作者和贡献者,以澄清您的具体询问。 (2认同)