我正在从 API 获取数据。我想处理这两种情况,当响应是有效的 JSON 时和当它不是时。
return fetch( ... )
.then(response => {
let res
try {
res = response.json()
} catch (e) {
res = response.blob()
}
return res
})
我认为这应该有效,但事实并非如此。它抛出
Uncaught (in promise) SyntaxError: Unexpected token 'N', " ... "... is not valid JSON
我做错了什么?
您正在处理
Promises
。 它们有一个内置的 .catch()
函数,您可以为该错误编写一个函数。此外,您不应依赖 try
和 catch
来确定如何处理数据,您可以通过请求中的 Content-Type
标头来确定数据类型。
MDN 网络文档
return fetch( ... )
.then(response => {
if (response.headers.get('Content-Type').includes('application/json')) {
return response.json();
} else {
return response.blob();
}
})
.catch(error => {
console.error('There was an error:', error);
});