How to get result of recursive callback function

Viewed 66

I'm using an API (mapbox) which has an async method using a callback function to get features from clusters on the map. Since each cluster may contain other clusters I need to call this recursively to get all the features. I've written this recursive method:

getClusterChildrenRecursive(clusterId: any, features: any[] = []) {
  //API call, I can't modify method getClusterChildren
  this.map.getSource('events').getClusterChildren(clusterId, (err, children) => {
    for (let i = 0; i < children.length; i++) {
      if (children[i].properties.cluster) {
        //Child is another cluster, recurse
        this.getClusterChildrenRecursive(children[i].properties.cluster_id, features);
      }
      else {
        //Found feature, add to collection
        features.push(children[i]);
      }
    }
  });
}

But I can't figure out how to call this and return a collection of all features. I've thought of returning a promise but can't get it to work.

0 Answers
Related