处理fetch中的空体解析错误

时间:2017-12-08 08:42:42

标签: javascript json reactjs

我有一些端点,它返回没有正文的响应。但是在其他api端点中它返回body,所以我们像这样处理我们的响应:

//...api request
.then((response) => {
return response.json().then((json) => ({ json, response }));
}).then(({ json, response }) => {
if (!response.ok || (typeof(json) === 'boolean' && !json)) {
  json.code = response.status;
  return Promise.reject(json);
}
if (schema) {
  return { json: getNormalizedResponse(json, schema), status: response.status};
}
return { json, status: response.status};
});

因此,当我们尝试解析没有正文的响应时,它总会引发错误。我该怎样处理这个时刻?

UPD:它会引发错误

return response.json().then((json) => ({ json, response }));

的字符串。

1 个答案:

答案 0 :(得分:0)

我认为您应该在下面的条件中更改检查顺序。您还应首先检查json不应是undefinednull

if (!response.ok || (json && typeof(json) === 'boolean')) {

编辑:

您应首先检查response,然后返回应修改如下:

.then((response) => {
  const json = response.json();
  return ( json ? response.json().then((json) => ({ json, response })) : '' );
}).then(({ json, response }) => {
if (!response.ok || (typeof(json) === 'boolean' && !json)) {
  json.code = response.status;
  return Promise.reject(json);
}
if (schema) {
  return { json: getNormalizedResponse(json, schema), status: response.status};
}
return { json, status: response.status};
});

我不确定如果response.jsonundefined,您希望返回什么内容,请根据需要进行修改。