我正在编写一个处理Angular $ http结果的函数。在我的$ http请求中,我使用.then()来处理结果。
var GET = function (url) {
return $http({
method: 'GET',
url: url
}).then(
function (data) {
return data.data;
},
function (data) {
return data.data;
});
};
然后我从另一个函数调用GET函数,如下所示:
var initializeUsers = function () {
return dbService.GET(serverUrl + dbResource).then(
function (data) {
// Some code to handle success
},
function (data) {
// Some code to handle error
});
};
问题在于:如果HTTP请求中存在错误,则由GET函数中的错误处理程序处理。但是,当initializeUsers
运行时,错误处理程序不会被触发,而是成功处理程序。所以这个错误没有"冒泡"应该
但是,如果我,而不是在GET函数中使用.then
,我会使用.success
和.error
,如下所示:
var GET = function (url) {
return $http({
method: 'GET',
url: url
}).success(
function (data) {
return data.data;
}).error(
function (data) {
return data.data;
});
};
它在initializeUsers
中运行良好。但是,如果我然后使用initializeUsers
从另一个函数调用.then
,则不会触发其中的错误处理程序。我似乎必须一直使用.success
和.error
,据我所知,这不是它应该如何工作的。
只要我在每个函数上明确使用.error
以实际捕获错误,否则错误会丢失,下一个函数就像最后一个函数成功一样。
我误解了,或者我的代码出了什么问题?
答案 0 :(得分:3)
如果您从承诺的错误回调中return
,它实际上会返回已解决(未拒绝)的承诺。请改用throw
,结果承诺将被拒绝......
var GET = function (url) {
return $http({
method: 'GET',
url: url
}).then(
function (data) {
return data.data;
},
function (data) {
throw data.data; // use throw here
});
};