From d25740ed51eace3dbadec11b7ab758e2ba35ccdc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20Garc=C3=ADa=20Aubert?= Date: Wed, 1 Aug 2018 16:02:05 +0200 Subject: [PATCH] Extract function to avoid dynamic clousures --- .../adapter/mapconfig-overviews-adapter.js | 125 +++++++++--------- 1 file changed, 66 insertions(+), 59 deletions(-) diff --git a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js index 6e8619e1..ec44ef0f 100644 --- a/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js +++ b/lib/cartodb/models/mapconfig/adapter/mapconfig-overviews-adapter.js @@ -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); + }); + }); +}