From 07701e0cc542ed19c50dbdd3056ea8a7b369a83a Mon Sep 17 00:00:00 2001 From: Piotr Gawron <piotr.gawron@uni.lu> Date: Mon, 22 May 2017 17:24:52 +0200 Subject: [PATCH] promise chain simplified --- .../overlay/AbstractTargettingDbOverlay.js | 101 +++++++++--------- 1 file changed, 51 insertions(+), 50 deletions(-) diff --git a/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js b/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js index c2b467e39d..f7b7b1eff6 100644 --- a/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js +++ b/frontend-js/src/main/js/map/overlay/AbstractTargettingDbOverlay.js @@ -19,36 +19,39 @@ AbstractTargettingDbOverlay.prototype.constructor = AbstractTargettingDbOverlay; AbstractTargettingDbOverlay.prototype.getElementsByQuery = function(query) { var self = this; - return new Promise(function(resolve){ + return new Promise(function(resolve) { var i; var queryId = null; - var queries =self.getQueries(); - for (i=0;i<queries.length;i++) { - if (queries[i]===query) { + var queries = self.getQueries(); + for (i = 0; i < queries.length; i++) { + if (queries[i] === query) { queryId = i; } } - if (queryId===null) { - throw new Error("Invalid query: "+query); + if (queryId === null) { + throw new Error("Invalid query: " + query); } var colourId = queryId; var elements = self._elementsByQuery[query]; var result = []; - if (elements.length>0) { - if (elements.length>1) { + if (elements.length > 0) { + if (elements.length > 1) { logger.warn("More than one element per query not implemented"); } var element = elements[0]; result.element = element; var iconCounter = 1; - for (i=0; i<element.getTargets().length; i++) { + for (i = 0; i < element.getTargets().length; i++) { var target = element.getTargets()[i]; var icon = self.getIcon(colourId, iconCounter++); - if (target.getTargetElements().length===0) { + if (target.getTargetElements().length === 0) { icon = null; } - result.push({element:target, icon:icon}); + result.push({ + element : target, + icon : icon + }); } } resolve(result); @@ -57,52 +60,50 @@ AbstractTargettingDbOverlay.prototype.getElementsByQuery = function(query) { AbstractTargettingDbOverlay.prototype.searchBySingleQuery = function(originalQuery) { var self = this; - return new Promise(function(resolve, reject) { - var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery); - if (self._elementsByQuery[query] !== undefined) { - resolve(self._elementsByQuery[query]); - } else { - return self.getElementsByQueryFromServer({ - query:originalQuery - }).then(function(elements) { - self._elementsByQuery[query] = elements; - - var identifiedElements = []; - for (var i=0;i<elements.length;i++) { - var targets = elements[i].getTargets(); - for (var j=0;j<targets.length;j++) { - var target = targets[j]; - for (var k=0;k<target.targetElements;k++) { - identifiedElements.push(new IdentifiedElement(target.targetElements[i])); - } + var query = self.encodeQuery(AbstractDbOverlay.QueryType.SEARCH_BY_QUERY, originalQuery); + if (self._elementsByQuery[query] !== undefined) { + return Promise.resolve(self._elementsByQuery[query]); + } else { + return self.getElementsByQueryFromServer({ + query : originalQuery + }).then(function(elements) { + self._elementsByQuery[query] = elements; + + var identifiedElements = []; + for (var i = 0; i < elements.length; i++) { + var targets = elements[i].getTargets(); + for (var j = 0; j < targets.length; j++) { + var target = targets[j]; + for (var k = 0; k < target.targetElements; k++) { + identifiedElements.push(new IdentifiedElement(target.targetElements[i])); } } - return self.getMap().fetchIdentifiedElements(identifiedElements, true); - }).then(function(){ - resolve(self._elementsByQuery[query]); - }).catch(reject); - } - }); + } + return self.getMap().fetchIdentifiedElements(identifiedElements, true); + }).then(function() { + return self._elementsByQuery[query]; + }); + } }; -AbstractTargettingDbOverlay.prototype.getIdentifiedElements = function(){ +AbstractTargettingDbOverlay.prototype.getIdentifiedElements = function() { var self = this; - return new Promise(function(resolve){ + return new Promise(function(resolve) { var queries = self.getQueries(); var result = []; var colourId = 0; - for (var i=0;i<queries.length;i++) { + for (var i = 0; i < queries.length; i++) { var query = queries[i]; var elements = self._elementsByQuery[query]; - for (var j=0;j<elements.length;j++) { + for (var j = 0; j < elements.length; j++) { var element = elements[j]; - + var targetElements = self.createIdentifiedElementsForTargetingClass(element, colourId); - + result.push.apply(result, targetElements); - + colourId++; } } @@ -115,20 +116,20 @@ AbstractTargettingDbOverlay.prototype.getDetailDataByIdentifiedElement = functio if (general) { return self.searchNamesByTarget(element); } else { - return new Promise(function(resolve){ - var result =[]; - var queries =self.getQueries(); - for (var i=0;i<queries.length;i++) { + return new Promise(function(resolve) { + var result = []; + var queries = self.getQueries(); + for (var i = 0; i < queries.length; i++) { var drugs = self._elementsByQuery[queries[i]]; - if (drugs===undefined) { + if (drugs === undefined) { drugs = []; } - for (var j=0;j<drugs.length;j++){ + for (var j = 0; j < drugs.length; j++) { var drug = drugs[j]; var targets = drug.getTargets(); - for (var k=0;k<targets.length;k++) { + for (var k = 0; k < targets.length; k++) { var elements = targets[k].getTargetElements(); - for (var l=0;l<elements.length;l++) { + for (var l = 0; l < elements.length; l++) { if (element.equals(elements[l])) { result.push(drug.getName()); } -- GitLab