gpt4 book ai didi

javascript - 是否有可能导致 fetch 的 text() 函数抛出?

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:40:52 24 4
gpt4 key购买 nike

在现代浏览器(或 node polyfill)中使用 fetch API,是否可以生成在响应主体上调用 text() 可能会抛出异常的场景?

对于不熟悉的人,调用 fetch 会返回一个 Promise。然后可以在顺序的 then() 回调中对该 promise 进行操作。通常,人们会分别使用 .json() 或 .text() 函数将 Response 的正文转换为 JSON 或纯文本。

json() 函数可以简单地通过返回无法解析为 JSON 的内容来抛出异常。这样做会导致 .json() 以与 JSON.parse() 相同的方式抛出。但是,我一直无法找到 .text() 可以抛出的场景。

我对 Fetch 规范的粗略检查没有揭示导致它抛出的方法,尽管它也没有提到 .json() 可以抛出任何一个。

这里有一些示例代码可以说明该场景:

const options = {
method: 'GET',
credentials: 'same-origin',
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json',
}
};

fetch('/my-api-endpoint/', options)
.then((response) => {
// Assume we get here and fetch didn't fail before this point
return response.text();
})
.catch((e) => {
// How do we get here? Is it possible?
console.log('text() threw');
console.log(e);
}).then((text) => {
// We don't want to get here.
console.log(text);
});

资源

没有成功的事情:

  • 专门将 JSON 作为对象发回 - text() 将其转换为 '[object Object]'
  • 正常发回 JSON - text() 将 JSON 字符串作为字符串返回(与无效 JSON 或非 JSON 字符串相同)
  • 发回 null 或 undefined - text() 返回空字符串
  • 人为构造一个 Response 并将主体值指定为 null 或 undefined - text() 返回空字符串

最佳答案

Is it possible to cause a fetch's text() function to throw?

这是不可能的,因为 text 运行一个 replacement mode decoder ;此外,您无法切换 error mode解码器的fatal

<德尔> yutakahiranothis comment 中确认.

text 可能会抛出

  • 如果它的请求在完成和消费之间中止
  • 如果Content-Encoding响应头不匹配相应的entity-body

关于javascript - 是否有可能导致 fetch 的 text() 函数抛出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49785911/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com