Axios捕获错误,然后又引发错误

时间:2019-04-15 06:20:14

标签: javascript vue.js axios

我有这种方法:

服务

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最初发现错误而不停止应用程序的操作时,它应该停止。

我非常感谢您提供的解决我这个问题的任何建议。谢谢。

3 个答案:

答案 0 :(得分:1)

您不应因错误而解决。我假设调用list方法的代码不会将错误作为承诺结果,对吗?

万一发生错误,必须拒绝承诺,否则您可能想抓住错误并使用默认值进行解决,但是解决错误没有太大意义。

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

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

答案 1 :(得分:0)

首先检查数据库连接

尝试一下

class LoginActivity : BaseActivity (){
    @Inject
    internal lateinit var personsRemoteRepository: PersonsRemoteRepository

    @Inject
    internal var restClient: RestClient? = null

    private var component: ApplicationComponent? = null
    private var mBinding: LoginActivityBinding? = null
    private var viewModel: LoginMethodsViewModel? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        mBinding = DataBindingUtil.setContentView(this, R.layout.login_activity)

        personsRemoteRepository = PersonsRemoteRepository(restClient)
        viewModel = LoginMethodsViewModel(personsRemoteRepository, this, mBinding)
        mBinding!!.viewModel = viewModel
    }
}

答案 2 :(得分:0)

您可以尝试以下操作:

catch(error => {
        if (!error.response) {
            // network error
            this.errorStatus = 'Error: Network Error';
        } else {
            this.errorStatus = error.response.data.message;
        }
      })