【发布时间】:2018-10-02 17:08:01
【问题描述】:
我正在尝试使用 Axios 更好地理解 javascript 承诺。我假装是处理 Request.js 中的所有错误,只从任何地方调用请求函数,而不必使用catch()。
在此示例中,对请求的响应将为 400,并带有 JSON 格式的错误消息。
这是我得到的错误:
Uncaught (in promise) Error: Request failed with status code 400
我找到的唯一解决方案是在 Somewhere.js 中添加.catch(() => {}),但我试图避免这样做。有可能吗?
代码如下:
请求.js
export function request(method, uri, body, headers) {
let config = {
method: method.toLowerCase(),
url: uri,
baseURL: API_URL,
headers: { 'Authorization': 'Bearer ' + getToken() },
validateStatus: function (status) {
return status >= 200 && status < 400
}
}
...
return axios(config).then(
function (response) {
return response.data
}
).catch(
function (error) {
console.log('Show error notification!')
return Promise.reject(error)
}
)
}
Somewhere.js
export default class Somewhere extends React.Component {
...
callSomeRequest() {
request('DELETE', '/some/request').then(
() => {
console.log('Request successful!')
}
)
}
...
}
【问题讨论】:
-
你想打破承诺链吗?
-
不确定。这是否会阻止我在调用请求函数时不必使用 catch?
-
不成功的状态码在逻辑上是您应用程序中的异常状态吗?您希望调用代码对其做出什么反应?
-
如果您将错误发送到成功路径,您很可能需要测试它们以便在更高级别分支。我想说让成功成为成功,让错误成为错误,并相应地 .catch()。
标签: javascript promise axios