Axios捕获错误然后再次抛出错误[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我有这个方法:

服务

const errorData = {"message":"Error", "data": []};

list(url) {
  return new Promise((resolve) => {
    axios.get(url).then((response) => {
      resolve(response.data);
    }).catch((error) => {
      resolve(errorData)
    });
  })
},

模块商店

 state: {
    list: []
 },
 getters: {
        list: state => state.list,
 },
 mutations: {
    LIST(state, payload) {
       state.list = payload || [];
    },
 }
actions: {
   list({ commit }) {
     commit('LIST', []);

     return service
          .list('api/list')
          .then((list) => {
           commit('LIST', list);
           });
    },
}

列表组件

this.$store.dispatch(`module/store/list`).then(() => {
     setTimeout(() => {
         var message = this.$store.getters['module/list'].message;
         this.$refs.inform.open('Error', message).then(() => {
             this.$router.push ({ path: "/" });
         });
     }, 1000);
})

注意:成功API调用的response.data返回一个与errorData结构相同的对象。

当我关闭调用API方法的服务器时,如果存在任何错误,Axios会捕获错误,但会抛出错误并暂停应用程序的当前操作“net :: ERR_CONNECTION_REFUSED”。我不知道在哪里抓到这个。我尝试使用与此相关的Axios附加所有方法的捕获,但后来我无法捕获错误。它应该在Axios最初捕获错误时停止,而不会停止应用程序的操作。

我真的很感激任何可以解决这个问题的建议。谢谢。

javascript vue.js axios
3个回答
1
投票

你不应该解决错误。我假设调用list方法的代码并不期望错误作为promise结果,是吗?

如果出现错误,则必须拒绝承诺,或者您可能希望捕获错误并使用默认值解决,但解决错误并没有多大意义。

您还可以像这样简化代码:

list(url) {
  return axios.get(url).then((response) => {
    return response.data;
  }).catch((error) => {
    return { items: [] }; // <--- default value
  });
}

0
投票

首先检查数据库连接

试试这个

async list(url){
  try {
    return await axios.get(url);
  } catch(e) {
    console.log('This is error:->', e);
  }
}

0
投票

你可以尝试下面:

catch(error => {
        if (!error.response) {
            // network error
            this.errorStatus = 'Error: Network Error';
        } else {
            this.errorStatus = error.response.data.message;
        }
      })
© www.soinside.com 2019 - 2024. All rights reserved.