You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
1.1 KiB
51 lines
1.1 KiB
'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: fulfilled, |
|
rejected: 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
|
|
|