在现代浏览器(或node polyfill)中使用fetch API,是否可以生成一个方案,在该方案中,响应主体上的调用text()可能会抛出?
对于不熟悉的人来说,调用fetch会返回一个Promise。然后可以在顺序then()回调中操作该承诺。通常,人们会分别使用.json()或.text()函数将Response的主体转换为JSON或纯文本。
json()函数只需返回一些无法解析为JSON的东西即可抛出。这样做会导致.json()以与JSON.parse()相同的方式抛出。但是,我一直无法找到.text()可以抛出的场景。
我对Fetch Spec的粗略检查没有发现导致它抛出的方法,但它也没有提到.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);
});
资源
尚未成功的事情:
'[object Object]'
答案 0 :(得分:3)
是否可以导致fetch的text()函数抛出?
这是不可能的,因为 text
运行replacement mode decoder;此外,您无法将解码器的error mode切换为fatal
。
text
可能会抛出