我有这个从API服务获取数据的VUEJS / VUEJS资源片段。
fetchData: function(name){
var self = this;
self.$http.get('http://www.apiservice.com/', {
params: {
city: name
},
}).then((response) => {
// success callback
toastr.success('Success!');
console.debug(response);
}, (response) => {
// error
toastr.error('Something went wrong!')
});
}
它总会返回200 OK响应...所以我真的不知道如何展示toastr.error
,如果它总是成功"。
错误回答如下所示:{Response: "False", Error: "City not found!"}
。
如何在200 ok返回的响应中获取false
并抛出错误?
答案 0 :(得分:1)
似乎错误的API设计返回"没有找到响应"作为HTTP 200,但如果您无法控制API,那么您只需要在成功函数中处理它。
将错误处理代码放入函数中并相应地调用它:
fetchData: function(name){
var self = this;
self.$http.get('http://www.apiservice.com/', {
params: {
city: name
},
}).then((response) => {
// success callback
if (response.Response === "False") {
onError(response)
} else {
toastr.success('Success!');
console.debug(response);
}
}, onError);
}
function onError(response) {
toastr.error('Something went wrong!')
}
答案 1 :(得分:0)
您可以使用promise chaining将promise从resolve转换为拒绝:
fetchData: function(name){
var self = this;
self.$http.get('http://www.apiservice.com/', {
params: {
city: name
},
}).then(response)=>{
if(response.Response === "False"){
return Promise.reject(response)
}else{
return response
}
},(a)=>a).then((response) => {
// success callback
toastr.success('Success!');
console.debug(response);
}, (response) => {
// error
toastr.error('Something went wrong!')
});
}
重要的是这个:
then(response)=>{
if(response.Response === "False"){
return Promise.reject(response)
}else{
return response
}
},(a)=>a)
因此,如果响应有效,并且数据包含Response: "False"
,我们将返回被拒绝的承诺,否则我们只返回响应数据,然后将其包装在已解决的承诺中,然后再执行下一个{{1}像以前一样执行,但是已经拒绝了无效数据。