我正在编写一个函数来处理来自 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
中工作正常。但是,如果我随后使用 .then
从另一个函数调用 initializeUsers
,则不会触发其中的错误处理程序。据我所知,我似乎必须一直使用 .success
和 .error
,这不是它应该工作的方式。
只要我在每个函数上显式使用 .error
以便真正捕获错误,否则错误就会丢失,下一个函数就像上一个函数成功一样。
是我理解错了,还是我的代码有问题?
最佳答案
如果您从 promise 的错误回调中返回
,它实际上会返回已解决(未拒绝)的 promise。使用 throw
代替,结果 promise 将被拒绝......
var GET = function (url) {
return $http({
method: 'GET',
url: url
}).then(
function (data) {
return data.data;
},
function (data) {
throw data.data; // use throw here
});
};
关于javascript - .then() 中的错误处理程序不会被触发,除非使用 .success 和 .error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24942969/