【问题标题】:Fetch api handle and read error responses获取 api 句柄并读取错误响应
【发布时间】:2019-10-27 21:27:57
【问题描述】:

我在 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();失败

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

【问题讨论】:

    标签: javascript fetch-api


    【解决方案1】:

    使用这个的问题:

    让 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');
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-20
      • 2020-10-25
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多