Javascript 是否可能导致提取';要抛出的s text()函数?

Javascript 是否可能导致提取';要抛出的s text()函数?,javascript,fetch-api,Javascript,Fetch Api,在现代浏览器(或a)中使用fetch API,是否可以生成一个场景,在该场景中,在响应体上调用text()会抛出错误 对于不熟悉的用户,调用fetch返回一个承诺。然后,可以在顺序的then()回调中对该承诺进行操作。通常,将分别使用.JSON()或.text()函数将响应体转换为JSON或纯文本 函数可以通过返回不能解析为json的内容来抛出。这样做将导致.json()以与json.parse()相同的方式抛出。但是,我一直找不到.text()可以抛出的场景 我对Fetch规范的粗略检查没有揭

在现代浏览器(或a)中使用fetch API,是否可以生成一个场景,在该场景中,在响应体上调用text()会抛出错误

对于不熟悉的用户,调用fetch返回一个承诺。然后,可以在顺序的then()回调中对该承诺进行操作。通常,将分别使用.JSON()或.text()函数将响应体转换为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或未定义的-text()返回空字符串
  • 人工构造响应并将主体值指定为null或未定义-text()返回空字符串
是否可能导致fetch的text()函数抛出

这是不可能的,因为
text
运行;此外,您不能将解码器的设置切换到
致命

在中确认它

text
可能会抛出

  • 如果其请求在完成和消耗之间中止
  • 如果内容编码响应头与相应的实体体不匹配

也许
.text()
不能抛出,但
获取(“/myapi endpoint/”,options)
可以,并且您在捕获中假设只有
.text
抛出。您在两个承诺之后添加了捕获内容:
fetch(…)
response.text()
@HMR感谢您的响应。是的,我可以扔。这就是为什么我要说“假设我们到达这里并在这一点之前没有失败”。如果我们到了那一点,那么我们知道fetch没有抛出。我的代码库解释了fetch已经可以抛出的事实,但这是一个关于text()函数的问题。感谢您的确认。