0

There are two asynchronous calls (@ .then(...)) in this function which get looped through multiple times. How can I restructure this function to ensure it only gets returns when all calls have been completed? I know I could use async/await in ES6 but I can only use ES5 with no libraries.

function queryLayer(layer, buffer){
  var query = layer.createQuery();
  query.geometry = buffer;
  query.spatialRelationship = "intersects";

  layer.queryFeatures(query).then(function(results){
    console.log(results.features[0].sourceLayer.title, results.features.length);
    if(!results.features.length > 0) return false;
    var features = results.features;
    features.forEach(function(feature){
      feature.distance = calculateDistance(buffer.centroid, feature.geometry);
      locator.locationToAddress(feature.geometry).then(function(x){
        feature.address = x.address;
      });
    });
    return features;
  });
}
RedHorse
  • 77
  • 5

1 Answers1

0
let promises = []
features.forEach(function(feature){
      promises.push(locator.locationToAddress(feature.geometry))
});

Promise.all(promises).then(x => {
  /* ... */
}
enno.void
  • 6,242
  • 4
  • 25
  • 42