Javascript 是否可能导致提取';要抛出的s text()函数?
在现代浏览器(或a)中使用fetch API,是否可以生成一个场景,在该场景中,在响应体上调用text()会抛出错误 对于不熟悉的用户,调用fetch返回一个承诺。然后,可以在顺序的then()回调中对该承诺进行操作。通常,将分别使用.JSON()或.text()函数将响应体转换为JSON或纯文本 函数可以通过返回不能解析为json的内容来抛出。这样做将导致.json()以与json.parse()相同的方式抛出。但是,我一直找不到.text()可以抛出的场景 我对Fetch规范的粗略检查没有揭示导致它抛出的方法,尽管它也没有提到.json()也可以抛出 下面是一些示例代码,可以说明该场景:Javascript 是否可能导致提取';要抛出的s text()函数?,javascript,fetch-api,Javascript,Fetch Api,在现代浏览器(或a)中使用fetch API,是否可以生成一个场景,在该场景中,在响应体上调用text()会抛出错误 对于不熟悉的用户,调用fetch返回一个承诺。然后,可以在顺序的then()回调中对该承诺进行操作。通常,将分别使用.JSON()或.text()函数将响应体转换为JSON或纯文本 函数可以通过返回不能解析为json的内容来抛出。这样做将导致.json()以与json.parse()相同的方式抛出。但是,我一直找不到.text()可以抛出的场景 我对Fetch规范的粗略检查没有揭
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或未定义的-text()返回空字符串
- 人工构造响应并将主体值指定为null或未定义-text()返回空字符串
text
运行;此外,您不能将解码器的设置切换到致命
在中确认它
text
可能会抛出
- 如果其请求在完成和消耗之间中止
- 如果内容编码响应头与相应的实体体不匹配
.text()
不能抛出,但获取(“/myapi endpoint/”,options)
可以,并且您在捕获中假设只有.text
抛出。您在两个承诺之后添加了捕获内容:fetch(…)
和response.text()
@HMR感谢您的响应。是的,我可以扔。这就是为什么我要说“假设我们到达这里并在这一点之前没有失败”。如果我们到了那一点,那么我们知道fetch没有抛出。我的代码库解释了fetch已经可以抛出的事实,但这是一个关于text()函数的问题。感谢您的确认。