javascript - 获取 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();
这是处理和读取错误响应的正确方法还是有更好的方法来实现这一点?
解决方案
使用这个的问题:
让 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');
}
推荐阅读
- google-sheets - Googl 表格 - 到表格的时间范围
- php - /broadcasting/auth 端点在尝试向 Sanctum 进行身份验证时总是失败并出现 403(拒绝访问)错误
- python - Django 令牌和会话身份验证
- ios - Apple 登录 TVOS 问题 -7014
- ios - 我应该如何为 swift 项目构建我的存储库?
- python - 了解使用不同宽度的高斯进行卷积/反卷积时的行为
- javascript - 在反应原生博览会上,图像未显示在 Android 设备上
- html - 我怎样才能添加有角度的边框或类似这个网站的东西?
- amazon-web-services - 地形导入 aws_cloudwatch_log_stream
- java - Java:如何将字符串中每个单词的第一个字符大写,并正确大写名称