I use ESRI request interceptors to append security token for secured services. Below is the basic code:
const interceptor = {
urls: myUrlPatterns,
before: (params) => {
const token = myMethodToGetToken();
params.requestOptions.query = params.requestOptions.query || {};
params.requestOptions.query.token = token;
},
};
esriConfig.request.interceptors.push(interceptor );
esriConfig.request.useIdentity = true;
This works basically fine. However when I add multiple layers to the map through map.addMany(layers) or layers.forEach(l => map.add(l)), one of the layers can't be created due to the error below:
[esri.layers.FeatureLayer] #load() Failed to load layer (title: 'My layer title', id: 'my-layer-id')
{error: RangeError: Maximum call stack size exceeded
If I only add this layer by map.add(layer). it works.
I looked into my console logs. When adding multiple layers, for example: layer0, layer1, layer2, layer3, layer0 and layer2 won't be intercepted by ESRI request interceptor, it seems these two layers will try to use identityManager to get the token. But layer1 and layer 3 are intercepted by ESRI request interceptor immediately. Either Layer0 or Layer2 will get the error above, and won't load.
I tried to set useIdentity to false, but layer0 and layer2 will get error saying token required.
Any ideas on how to fix this?
Thanks!