Trong ứng dụng của tôi, tôi sử dụng một đánh chặn để bắt tất cả các lỗi phản ứng http, như:angularJS: 404 tuỳ chỉnh đánh chặn xử lý - phản ứng với url
var response = function(response) {
if(response.config.url.indexOf('?page=') > -1) {
skipException = true;
}
return response;
}
var responseError = function(rejection) {
if (rejection.status === 401 || rejection.status === 403) {
/**/
}
else if (rejection.status >= 500 || rejection.status === 0) {
/**/
}
else if (rejection.status === 404 && !skipException) {
/**/
}
else if (rejection.status === 404 && skipException) {
/**/
}
else{
/**/
}
return $q.reject(rejection);
};
Và khi tôi đi đến bộ điều khiển của tôi (khi phương pháp getArticles
tôi trả về một số dữ liệu, không phải 404 - khi mảng bài viết trống) tất cả đều OK: 404 bị bắt gặp skipException == true
.
Nhưng khi mảng bài viết của tôi trống thì máy chủ trả về 404 và khi tôi nhập bộ điều khiển này, tôi không thể nhận được response.config.url
- không có phản hồi nào bị bắt, nhưng tại sao? Tôi nghĩ rằng kẻ đánh chặn sẽ bắt được tất cả các phản ứng.
$timeout(function() {
$scope.getArticles();
}, 100);
và $scope.getArticles
có mã ví dụ:
getDataService.getArticles($scope.pageNum).then(function(response) {
/**/
});
dịch vụ:
var getEventsByScrollService = function(num) {
var deferred = $q.defer();
$http.get(***, {
})
.success(function(response) {
deferred.resolve(response);
}).error(function(err, status) {
if (status === 404){
deferred.resolve([]);
}
else{
deferred.reject(err);
}
});
return deferred.promise;
};
Làm thế nào tôi có thể có điều kiện nắm bắt 404 của tùy thuộc vào URL? Bởi vì điều này:
if(response.config.url.indexOf('?page=') > -1) {
Không phải lúc nào cũng hoạt động.
Kiểm tra logic bằng URL có vẻ sai. Dường như bạn nên có các Dịch vụ và Dịch vụ khác nhau cho các hành vi đánh chặn khác nhau, Phương thức Dịch vụ nên gọi các trình chặn khác nhau gọi các Trình giải quyết Lỗi khác nhau. Một trong các Trình giải quyết Lỗi nên xử lý các lỗi của 404 và trình gỡ lỗi khác sẽ bỏ qua 404. Phương thức dịch vụ nên quyết định điều này. Logic ghép nối với âm thanh của URL giống như vi phạm SoC. –
bạn có thể chia sẻ mã đầy đủ của phản hồi lỗi – harishr
@DaveAlperovich bạn có thể cung cấp ví dụ với các trình chặn khác nhau trong trường hợp của tôi không? – brabertaser19