Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/456.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Axios promise未在vue方法中抛出错误_Javascript_Vue.js_Promise_Axios_Vuex - Fatal编程技术网

Javascript Axios promise未在vue方法中抛出错误

Javascript Axios promise未在vue方法中抛出错误,javascript,vue.js,promise,axios,vuex,Javascript,Vue.js,Promise,Axios,Vuex,正如标题所述,我在捕获Vue方法中的错误时遇到问题getTodo 单击设置不正确的url,然后单击获取Todo,您可以看到存储中出现了预期的错误,但在Vue中,当执行获取Todo承诺的时,没有错误。如果选择设置正确的url,则其工作正常。 控制台日志应如下所示: error on store error on vue JavaScript和HTML如下: const store=新的Vuex.store({ 声明:{ 待办事项:'', 消息:“”, 网址:'https://jsonpla

正如标题所述,我在捕获Vue方法中的错误时遇到问题
getTodo

单击设置不正确的url,然后单击获取Todo,您可以看到存储中出现了预期的错误,但在Vue中,当执行
获取Todo
承诺的
时,没有错误。如果选择设置正确的url,则其工作正常。
控制台日志应如下所示:

error on store  
error on vue
JavaScriptHTML如下:

const store=新的Vuex.store({
声明:{
待办事项:'',
消息:“”,
网址:'https://jsonplaceholder.typicode.com/todos/test',
正确:错误
},
突变:{
setTodo(状态、有效负载){
state.todo=有效载荷;
},
setMsg(状态、有效负载){
state.msg=有效载荷;
},
设置正确(状态){
state.url=https://jsonplaceholder.typicode.com/todos/1';
state.correct=true;
},
设置不正确(状态){
state.url=https://jsonplaceholder.typicode.com/todos/test';
state.correct=false;
}
},
行动:{
getTodo({state,commit}){
返回axios.get(state.url)
。然后(响应=>{
console.log(“存储成功”);
提交('setMsg','success on store');
提交('setTodo',response.data);
})
.catch(错误=>{
console.log('store上的错误');
提交('setMsg','error on store');
});
}
}
})
新Vue({
el:“#应用程序”,
数据:{
消息:“”
},
计算:{
待办事项(){
返回store.state.todo;
},
msg(){
返回store.state.msg;
},
更正URL(){
返回store.state.correct;
}
},
方法:{
getTodo(){
store.dispatch('getTodo')。然后(()=>{
console.log('successonvue');
this.message='vue成功'
}).catch((e)=>{
log('vue上的错误');
this.message='vue上的错误';
});
},
setCorrect(){
commit('setCorrect');
},
设置错误(){
store.commit('setError');
}
}
})

页面标题
{{message}}

{{todo}}

正确的url:{{correctureURL}}

开始做 设置正确的url 设置错误的url
getTodo
操作中捕获错误后,需要重新抛出错误

actions: {
        getTodo({ state, commit }) {
            return axios.get(state.url)
                .then(response => {
                    console.log('success on store');
                    commit('setMsg', 'success on store');
                    commit('setTodo', response.data);
                })
                .catch(error => {
                    console.log('error on store');
                    commit('setMsg', 'error on store');
                    throw error;
                });
        }
}
const store=新的Vuex.store({
声明:{
待办事项:'',
消息:“”,
网址:'https://jsonplaceholder.typicode.com/todos/test',
正确:错误
},
突变:{
setTodo(状态、有效负载){
state.todo=有效载荷;
},
setMsg(状态、有效负载){
state.msg=有效载荷;
},
设置正确(状态){
state.url=https://jsonplaceholder.typicode.com/todos/1';
state.correct=true;
},
设置不正确(状态){
state.url=https://jsonplaceholder.typicode.com/todos/test';
state.correct=false;
}
},
行动:{
getTodo({state,commit}){
返回axios.get(state.url)
。然后(响应=>{
console.log(“存储成功”);
提交('setMsg','success on store');
提交('setTodo',response.data);
})
.catch(错误=>{
console.log('store上的错误');
提交('setMsg','error on store');
投掷误差;
});
}
}
})
新Vue({
el:“#应用程序”,
数据:{
消息:“”
},
计算:{
待办事项(){
返回store.state.todo;
},
msg(){
返回store.state.msg;
},
更正URL(){
返回store.state.correct;
}
},
方法:{
getTodo(){
store.dispatch('getTodo')。然后(()=>{
console.log('successonvue');
this.message='vue成功'
}).catch((e)=>{
log('vue上的错误');
this.message='vue上的错误';
});
},
setCorrect(){
commit('setCorrect');
},
设置错误(){
store.commit('setError');
}
}
})

页面标题
{{message}}

{{todo}}

正确的url:{{correctureURL}}

开始做 设置正确的url 设置错误的url
谢谢你的回答,它的效果与我预期的一样,但我还有两个问题。将来使用这种方法会有问题吗?例如,如果我想构建嵌套的API调用。第二个问题是关于在axios中使用js承诺,或者它没有任何意义?@hafer承诺链中的错误是一种常见模式。您只需确保在链的后一个阶段中使用。至于axios,您知道它是基于承诺的,并且它是一个设计良好的库,因此除非您迫切需要加入自己的承诺,否则我不会这样做,以免您在过程中不知不觉地陷入其中。