我有这种方法:
服务
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最初发现错误而不停止应用程序的操作时,它应该停止。
我非常感谢您提供的解决我这个问题的任何建议。谢谢。
答案 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;
}
})