fetch()
返回一个Promise对象,如果成功则解析为一个Response
对象。一个非常常见的操作是立即调用Response.json()
将响应主体转换为JSON对象。
如果响应主体不是有效的JSON,则Response.json()
Promise会失败并显示错误消息,消息大致如下:
在JSON中的位置0处,X的标记非预期
这对于诊断问题来说并不太有帮助。理想情况下,我想能够查看服务器内容(通常是错误消息)。
然而,在Chrome浏览器中似乎只能一次读取Response.body
流(至少在Chrome中是这样)。 (甚至有一个只读的Response.bodyUsed
标志。)当Response.json()
尝试将主体转换为JSON时已经发生了这种情况,因此在JSON解析失败的情况下主体似乎永远丢失了。
除了手动读取原始fetch
Promise解析后的响应,并将其转换为JSON之外,是否有其他方法可以恢复原始的响应主体?
response.text()
方法来读取数据。你也可以克隆一个响应对象,但最好的方法是始终返回 JSON 数据,即使是错误信息也应该以 JSON 的格式返回。 - adeneo