51 lines
1.1 KiB
JavaScript
51 lines
1.1 KiB
JavaScript
|
'use strict';
|
||
|
|
||
|
function InterceptorManager() {
|
||
|
this.handlers = [];
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Add a new interceptor to the stack
|
||
|
*
|
||
|
* @param {Function} fulfilled The function to handle `then` for a `Promise`
|
||
|
* @param {Function} rejected The function to handle `reject` for a `Promise`
|
||
|
*
|
||
|
* @return {Number} An ID used to remove interceptor later
|
||
|
*/
|
||
|
InterceptorManager.prototype.use = function use(fulfilled, rejected) {
|
||
|
this.handlers.push({
|
||
|
fulfilled,
|
||
|
rejected,
|
||
|
});
|
||
|
return this.handlers.length - 1;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Remove an interceptor from the stack
|
||
|
*
|
||
|
* @param {Number} id The ID that was returned by `use`
|
||
|
*/
|
||
|
InterceptorManager.prototype.eject = function eject(id) {
|
||
|
if (this.handlers[id]) {
|
||
|
this.handlers[id] = null;
|
||
|
}
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Iterate over all the registered interceptors
|
||
|
*
|
||
|
* This method is particularly useful for skipping over any
|
||
|
* interceptors that may have become `null` calling `eject`.
|
||
|
*
|
||
|
* @param {Function} fn The function to call for each interceptor
|
||
|
*/
|
||
|
InterceptorManager.prototype.forEach = function forEach(fn) {
|
||
|
this.handlers.forEach((h) => {
|
||
|
if (h !== null) {
|
||
|
fn(h);
|
||
|
}
|
||
|
});
|
||
|
};
|
||
|
|
||
|
export default InterceptorManager;
|