Extract function to avoid dynamic clousures

This commit is contained in:
Daniel García Aubert
2018-08-01 16:02:05 +02:00
parent 843f4b8e28
commit d25740ed51
@@ -20,61 +20,18 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon
var augmentLayersQueue = queue(layers.length);
function augmentLayer(layer, done) {
if (layer.type !== 'mapnik' && layer.type !== 'cartodb') {
return done(null, layer);
}
self.overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) {
if (err) {
return done(err, layer);
}
layers.forEach(function (layer) {
augmentLayersQueue.defer(
augmentLayer,
self.overviewsMetadataBackend,
self.filterStatsBackend,
user,
layer,
analysesResults
);
});
var query_rewrite_data = { overviews: metadata };
var filters, unfiltered_query;
if (layer.options.source && analysesResults && !layer.options.sql_wrap) {
var sourceId = layer.options.source.id;
var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; });
if (node) {
node = node.rootNode;
filters = node.getFilters();
var filters_disabler = Object.keys(filters).reduce(
function (disabler, filter_id) { disabler[filter_id] = false; return disabler; },
{}
);
unfiltered_query = node.getQuery(filters_disabler);
query_rewrite_data.filters = filters;
query_rewrite_data.unfiltered_query = unfiltered_query;
}
}
if (!filters) {
if (!_.isEmpty(metadata)) {
layer = Object.assign({}, layer);
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
}
return done(null, layer);
}
self.filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) {
if (err) {
return done(null, layer);
}
query_rewrite_data.filter_stats = stats;
if (!_.isEmpty(metadata)) {
layer = Object.assign({}, layer);
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
}
return done(null, layer);
});
});
}
function layersAugmentQueueFinish(err, layers) {
augmentLayersQueue.awaitAll(function layersAugmentQueueFinish (err, layers) {
if (err) {
return callback(err);
}
@@ -86,11 +43,61 @@ MapConfigOverviewsAdapter.prototype.getMapConfig = function (user, requestMapCon
requestMapConfig.layers = layers;
return callback(null, requestMapConfig);
}
layers.forEach(function (layer) {
augmentLayersQueue.defer(augmentLayer, layer);
});
augmentLayersQueue.awaitAll(layersAugmentQueueFinish);
};
function augmentLayer(overviewsMetadataBackend, filterStatsBackend, user, layer, analysesResults, done) {
if (layer.type !== 'mapnik' && layer.type !== 'cartodb') {
return done(null, layer);
}
overviewsMetadataBackend.getOverviewsMetadata(user, layer.options.sql, function (err, metadata) {
if (err) {
return done(err, layer);
}
var query_rewrite_data = { overviews: metadata };
var filters, unfiltered_query;
if (layer.options.source && analysesResults && !layer.options.sql_wrap) {
var sourceId = layer.options.source.id;
var node = _.find(analysesResults, function (a) { return a.rootNode.params.id === sourceId; });
if (node) {
node = node.rootNode;
filters = node.getFilters();
var filters_disabler = Object.keys(filters).reduce(
function (disabler, filter_id) { disabler[filter_id] = false; return disabler; },
{}
);
unfiltered_query = node.getQuery(filters_disabler);
query_rewrite_data.filters = filters;
query_rewrite_data.unfiltered_query = unfiltered_query;
}
}
if (!filters) {
if (!_.isEmpty(metadata)) {
layer = Object.assign({}, layer);
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
}
return done(null, layer);
}
filterStatsBackend.getFilterStats(user, unfiltered_query, filters, function (err, stats) {
if (err) {
return done(null, layer);
}
query_rewrite_data.filter_stats = stats;
if (!_.isEmpty(metadata)) {
layer = Object.assign({}, layer);
layer.options = Object.assign({}, layer.options, { query_rewrite_data });
}
return done(null, layer);
});
});
}