javascript - 被拒绝的 HTTP 承诺没有命中 catch 块
问题描述
我使用 VueJs(和 Vuex)和 Axios 来与 Express Api 通信。我可以删除我自己的使用服务的用户帐户
import api from '@/services/api.js';
export default {
deleteAccount: () => api().delete('/users')
};
实例api
在哪里。axios
我不需要传入用户 ID,因为 api 通过token识别用户。
在我的设置视图中,我可以使用此服务
<script>
import { mapActions } from 'vuex';
import UserService from '@/services/users';
export default {
name: 'Settings',
methods: {
...mapActions('alert', [
'showSuccessAlert',
'showErrorAlert'
])
deleteAccount: async function() {
try {
await UserService.deleteAccount();
this.showSuccessAlert({ message: 'Account was deleted successfully' });
// other stuff
} catch (error) {
this.showErrorAlert({ message: error.message });
}
}
}
};
</script>
打电话UserService.deleteAccount()
给我一个未决的承诺。使用await
返回给我的 api 响应。
目前,api 总是返回 a500
用于测试目的。我想,如果 Promise 被拒绝,代码总是会直接跳到 catch 块中。在这里,代码返回一个被拒绝的 Promise(并将“内部服务器错误”写入控制台,但传递并显示成功警报/从不执行 catch 块中的代码。
代码有什么问题?我误解了承诺吗?
更新
我的 axios 实例
import axios from 'axios';
import TokensService from '@/services/tokens.js';
import store from '@/store/store.js';
function getTokenString() {
return `Bearer ${TokensService.getToken()}`;
}
export default () => {
const instance = axios.create({
baseURL: 'http://localhost:3000/',
headers: {
'Content-Type': 'application/json',
Authorization: getTokenString(),
},
});
instance.interceptors.request.use((config) => {
config.headers.Authorization = getTokenString();
return config;
}, (err) => Promise.reject(err));
instance.interceptors.response.use((res) => res, (err) => {
if (err.response.status === 401) {
store.dispatch('authentication/destroySession');
store.dispatch('alert/showErrorAlert', { message: err.message });
}
return err;
});
return instance;
};
调用api().delete()
是一样的axios.delete('http://localhost:3000/users')
解决方案
尝试在这里返回一个被拒绝的承诺
instance.interceptors.response.use((res) => res, (err) => {
if (err.response.status === 401) {
store.dispatch('authentication/destroySession');
store.dispatch('alert/showErrorAlert', { message: err.message });
}
return Promise.reject(err);
});
推荐阅读
- javascript - 删除多维数组中所有对象数组中不常见的对象
- performance - 您如何测量目标检测中的推理速度?
- processing - 在处理中,如何将鼠标悬停在矩形上以改变颜色?
- python - 使用python对象和类查找点之间的距离
- reactjs - 使用 react 更新 MaterialTable wrt 自定义过滤条件中的数据
- c# - 使用 C# windows 应用程序表单进行冒泡排序如何清除 label.text 每次按钮单击
- dpdk - Mlx5_net:无法读取设备计数器:没有这样的文件或目录
- node.js - 如何解决 Angular cli 安装后错误
- html - 带有 2 行文本的按钮与带有 1 行文本的按钮尽管宽度、高度、边距和填充都已设置
- python - 使用 Python 打开显示其原始文件名的图像?