Tôi hiện đang sử dụng đoạn mã sau để rethrow một yêu cầu mà trả về một 401 từ API của tôi:Làm thế nào để xử lý nhiều phản ứng trong góc responseError chặn
responseError: function(rejection) {
var authData = localStorageService.get('authorizationData');
if (rejection.status === 401 && authData) {
var authService = $injector.get('authService');
var $http = $injector.get('$http');
̶v̶a̶r̶ ̶d̶e̶f̶e̶r̶r̶e̶d̶ ̶=̶ ̶$̶q̶.̶d̶e̶f̶e̶r̶(̶)̶;̶
var promise = authService.refreshToken();
return ̶d̶e̶f̶e̶r̶r̶e̶d̶.̶ promise.then(function() {
return $http(rejection.config);
});
}
return $q.reject(rejection);
}
này hoạt động tuyệt vời cho 1 yêu cầu, nhưng nó doesn' t dường như làm việc nếu tôi nhận được hai 401 trở lại từ một trang duy nhất, chẳng hạn như khi trang đang tải với hai cuộc gọi api để cư trú các phần khác nhau. Làm thế nào tôi có thể nhận được đánh chặn của tôi để rethrow nhiều cuộc gọi hoãn lại?
Ngoài ra, không nên đánh lửa cho mỗi 401 riêng lẻ? Không lý tưởng, nó sẽ gây ra nhiều cuộc gọi làm mới trên một trang duy nhất, nhưng cải thiện từ dữ liệu bị thiếu do cuộc gọi không bị thu hồi.
Ảnh chụp màn hình:
* không nên lửa đánh chặn cho mỗi 401 cá nhân * - nó cần. Nếu điều này không xảy ra, vui lòng cung cấp http://stackoverflow.com/help/mcve. Một plunk/fiddle có khả năng tái tạo vấn đề có thể hữu ích. – estus
Bạn nhận được hai 401 vì bạn đang tắt, song song, hai XHR với mã thông báo cũ. Vấn đề gì gây ra? Liệu nó cuối cùng có được dữ liệu hợp lệ cho cả hai XHR? – georgeawg
@georgeawg Hành vi tôi thấy là hai yêu cầu không đồng bộ được sử dụng để điền trang, cả 401, yêu cầu thứ 2 được trả về và nói rằng tôi có một lựa chọn cho mỗi cuộc gọi, lựa chọn thứ nhất trống, thứ 2 có dữ liệu. – RandomUs1r