我想这必须是一个非常正常的设置:
return $http.get('some/url')
.then(function (result) {
if (result.data.success) {
//Do something useful
} else {
//We've hit some sort of error
}
},
function () {
return "Failed to communicate with the server, or the server encountered an error.";
});
我的问题是如何处理http调用在技术上成功的情况,但我们从服务器返回的数据是错误的,不可用的,或明确指出出错了。我想做的就是把自己推到承诺链的失败轨道上。这样,任何使用此承诺的人都可以执行自己的失败功能,如果这是有道理的。
我知道$ q为您提供了创建延迟对象所需的工具,然后让您在任何情况下调用resolve或reject,但我想知道是否有办法在不使用$ q的情况下执行此操作
答案 0 :(得分:2)
要将承诺从已解决状态更改为已拒绝状态,您可以从.then()
处理程序执行以下两项操作之一:
.then()
会自动捕获.then()
处理程序函数中的异常并将其转为拒绝。所以,这是你可以做到的一种方式:
return $http.get('some/url').then(function (result) {
if (result.data.success) {
//Do something useful
} else {
//We've hit some sort of error, make promise become rejected
throw new Error("invalid data received");
}
}).catch(function (err) {
// log error
console.log(err);
// make sure promise stays rejected
throw err;
});
答案 1 :(得分:0)
如果您使用ES6,则可以使用JavaScript本机承诺。
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise