提取api句柄并读取错误响应

时间:2019-06-13 09:55:07

标签: javascript fetch-api

我在JavaScript中有以下fetch API调用

async doCheckin(authCode) {
    return await fetch(endpoint + "/checkin", {
        method: "put",
        headers: new Headers({'content-type': 'application/json'}),
        body: JSON.stringify({authCode: authCode})
    })
        .then(this.checkStatus)
        .then(this.toJson)
        .catch(function (error) {
            console.error("Checkin not successful");
            throw error;
        });
}

async checkStatus(response) {
    if (response.status >= 200 && response.status < 300) {
        return Promise.resolve(response)
    } else {
        let errorJson = await response.json();
        return Promise.reject(errorJson.code);
    }
}

toJson(response) {
    return response.json()
}

该函数的调用方式如下

   let checkIn = (await apiService.doCheckin(code)
        .catch(displayError));

此调用应处理来自服务器的JSON中的错误响应,并显示错误代码。我注意到某些应用程序内移动浏览器无法处理错误情况,并在let errorJson = await response.json();

处失败

这是处理和读取错误响应的正确方法还是有更好的方法来实现这一目标?

1 个答案:

答案 0 :(得分:0)

使用此问题:

  

让errorJson =等待response.json();

是您未处理方法调用json()失败的情况。相反,您应该在处理它的地方做类似的事情。

try {
  let errorJson = await response.json();

  return Promise.reject(errorJson.code);
} catch (e) {
  // I don't know what error is occurring so just reject with a 503 
  return Promise.reject('503');
}