У нас есть API-интерфейсы, которые возвращают ошибки внутри XML-ответов, вместо того, чтобы отклонять их и отправлять ответы об ошибках. Поэтому у меня есть следующий код, чтобы справиться с ними,HTTPInterceptor in AngularJS
$http({
url: apiURL,
method: "POST",
data: req,
headers: oHeaders,
dataType: "xml",
})
.success(function(data,status) {
console.log('success!!!!!');
deff.resolve(data);
})
.error(function(data,status) {
console.log('This is what I want to see!!!!!');
deff.reject(data);
});
myApp.factory('customHttpInterceptor', ['$q', function ($q) {
return function (promise) {
return promise.then(function (response) {
var parsed;
if (response.config.dataType == 'xml'){
parsed = $.xml2json(response.data);
if (parsed) {
angular.forEach(parsed, function(v, k) {
if (k == 'status') {
if (v.APIErrors) {
return $q.reject(response);
}
}
});
}
console.log(parsed);
}
return response;
}, function (errResponse) {
// do something on error
console.log('Error section in interceptor');
return $q.reject(errResponse);
});
};
}]);
То, что я ожидал получить от том, что при возникновении ошибки определены в перехватчик будет отвергать обещание и контроль будет попасть в раздел ошибок из $ http и запишите «Это то, что я хочу видеть !!!!!» сообщение. Но вместо этого демонстрируется «успех !!!!!» сообщение.
Это так, как это работает, или я делаю что-то неправильно?
Иш
Спасибо. Проблема действительно возвращалась внутри forEach. – Ish