Javascript 如何在fetchapi中处理空响应

Javascript 如何在fetchapi中处理空响应,javascript,json,react-native,fetch,Javascript,Json,React Native,Fetch,我正在构建一个react本机应用程序,并用于处理服务器请求,如果从服务器返回的json不为null,则工作正常,但如果从服务器返回的响应为null,则会给我一个错误-“json解析错误:意外的EOF”,下面是我用于获取的代码,我试图在调试时设置断点,以查看从服务器返回null时响应的内容,我找不到可以在解析之前检查响应是否为null的内容,因此需要帮助 return fetch(url, //service url{ method: type, // get or post hea

我正在构建一个react本机应用程序,并用于处理服务器请求,如果从服务器返回的json不为null,则工作正常,但如果从服务器返回的响应为null,则会给我一个错误-“json解析错误:意外的EOF”,下面是我用于获取的代码,我试图在调试时设置断点,以查看从服务器返回null时响应的内容,我找不到可以在解析之前检查响应是否为null的内容,因此需要帮助

return fetch(url, //service url{
 method: type,     // get or post
  headers: {
   'Accept': 'application/json',
   'Content-Type': contentType,
  },
  body: data    //some input parameters
}).then((response) => {
        return  response.json();
    })
    .then((responseJson) => {
      request.onSuccess(responseJson);   // success callback
    })
    .catch((error) => {
     request.onError(error);     // error callback
      console.error(error);
    });
有一个很好的答案,但在我的例子中,我需要在response.text()返回后访问response对象:


如果json响应
null
而不是使用response.json()则使用response.text()

fetch(路径)
.然后(功能(响应){
返回response.text()
}).then(功能(数据){
解析(data.length==0?null:JSON.parse(data))
}).catch(错误=>{
拒绝(错误);
})

只需尝试/捕获
response.json()
。如果失败,您知道您得到了正确的响应,但不是有效的JSON,并且可以相应地重新路由。(fetch API的
.catch
部分不用于捕获抛出,而仅用于捕获真实的网络/请求错误)检查以下内容:
function buildResult(response) {
  // response.json() crashes on null response bodies
  // return {
  //   data: response.json(),
  //   identityToken: response.identityToken // sliding expiration...
  // };

  return new Promise((resolve, reject) => {
    response.text().then(body => {
      resolve({
        data: body.length ? JSON.parse(body) : null,
        identityToken: response.identityToken // sliding expiration...
      });
    }).catch(err => {
      reject(err);
    });
  });
}

//
// the api fetch function
//

function apiFetch(url) {
  return fetch(url)
    .then(checkStatus)
    .then(parseIdentityToken)
    .then(buildResult);
}