'use strict';
|
|
var utils = require('./../utils');
|
|
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, options) {
|
this.handlers.push({
|
fulfilled: fulfilled,
|
rejected: rejected,
|
synchronous: options ? options.synchronous : false,
|
runWhen: options ? options.runWhen : null
|
});
|
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) {
|
utils.forEach(this.handlers, function forEachHandler(h) {
|
if (h !== null) {
|
fn(h);
|
}
|
});
|
};
|
|
module.exports = InterceptorManager;
|