मैं वर्तमान में एक अनुरोध है कि मेरे एपीआई से एक 401 देता है rethrow के लिए निम्न कोड का उपयोग कर रहा कोणीय responseError इंटरसेप्टर में कई प्रतिक्रियाओं को संभालने के लिए:कैसे
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);
}
यह 1 अनुरोध के लिए अच्छा काम करता है, लेकिन यह 'नहीं करता है टी काम करता प्रतीत होता है अगर मुझे एक पृष्ठ से दो 401 वापस मिलते हैं, जैसे कि जब पृष्ठ अलग-अलग वर्गों को पॉप्युलेट करने के लिए दो एपीआई कॉल के साथ लोड हो रहा है। मैं एकाधिक अवरुद्ध कॉल को पुनर्स्थापित करने के लिए अपना इंटरसेप्टर कैसे प्राप्त कर सकता हूं?
साथ ही, प्रत्येक 401 व्यक्तिगत रूप से इंटरसेप्टर आग नहीं चाहिए? आदर्श नहीं, यह एक पृष्ठ पर एकाधिक रीफ्रेश कॉल का कारण बनता है, लेकिन किसी कॉल के कारण गायब डेटा में सुधार को पुनर्स्थापित नहीं किया जा रहा है।
स्क्रीनशॉट:
responseError: function(rejection) {
var authService = $injector.get('authService');
var $http = $injector.get('$http');
var tokenPromise = null;
var authData = localStorageService.get('authorizationData');
if (rejection.status === 401 && authData) {
if (!tokenPromise) {
tokenPromise = authService.refreshToken()
.finally(function() {
tokenPromise = null;
});
};
return tokenPromise.then(function() {
return $http(rejection.config);
});
} else {
throw rejection;
}
}
ऊपर के उदाहरण अस्वीकृति में:
* चाहिए न कि प्रत्येक 401 के लिए इंटरसेप्टर आग व्यक्तिगत * - यह होना चाहिए। यदि ऐसा नहीं होता है, तो कृपया http://stackoverflow.com/help/mcve प्रदान करें। एक प्लंक/पहेली जो समस्या को दोहराने में सक्षम है, मदद कर सकती है। – estus
आपको दो 401 मिल रहे हैं क्योंकि आप समानांतर में, दो एक्सएचआर स्टेल टोकन के साथ फायरिंग कर रहे हैं। क्या समस्या है जिसके कारण? क्या अंततः एक्सएचआर दोनों के लिए वैध डेटा मिलता है? – georgeawg
@georgeawg मैं जिस व्यवहार को देख रहा हूं वह दो एसिंक अनुरोध है जो पृष्ठ को आग लगने के लिए उपयोग किया जाता है, दोनों 401, दूसरा (?) अनुरोध फिर से चला जाता है और कहता है कि मेरे पास प्रति कॉल का चयन है, पहला चयन खाली है, दूसरा डेटा है – RandomUs1r