I have a method that is failing when returning an array of objects. As mentioned in the title - the array is confirmed to be populated but is empty in the response.
Here is the full flow:
The Url:
http://localhost:53000/api/v1/landmarks?lat=40.76959&lng=-73.95136&radius=160
Is routed to the corresponding index:
api.route('/api/v1/landmarks').get(Landmark.list);
The Index Calls a Service:
exports.list = (req, res) => {
    const landmark = new LandmarkService();
    landmark.getLandmarks(req)
        .then(landmarks => {
            var response = new Object();
                response.startindex = req.query.page;
                response.limit = req.query.per_page;
                response.landmarks = landmarks;
                res.json(response);
        })
        .catch(err => {
            logger.error(err);
            res.status(422).send(err.errors);
        });
};
The Service Method Uses a Data Access Class to Return the Promise
  getLandmarks(req) {
    const params = req.params || {};
    const query = req.query || {};
    const page = parseInt(query.page, 10) || 1;
    const perPage = parseInt(query.per_page, 10);
    const userLatitude = parseFloat(query.lat); 
    const userLongitude = parseFloat(query.lng); 
    const userRadius = parseFloat(query.radius) || 10;
    const utils = new Utils();
    const data = new DataService();
    const landmarkProperties = ['key','building','street','category','closing', 
            'email','name','opening','phone','postal','timestamp','type','web'];
    return data.db_GetAllByLocation(landmarksRef, landmarkLocationsRef, 
                    landmarkProperties, userLatitude, userLongitude, userRadius);
    } // getLandmarks
However, the response is always empty.
I am building an array in the called method and populating it with JSON objects. That is what is supposed to be sent back in the response. I can confirm that the attributes array is correctly populated before I hit the return statement. I can log it to the console. I can also send back a test array filled with stub values successfully.
I have a feeling it is how I am setting things up inside the Promise?
Data Access Method That Should Return Array of Objects:
db_GetAllByLocation(ref, ref_locations, properties, user_latitude, user_longitude, user_radius)
{  
        const landmarkGeoFire = new GeoFire(ref_locations);
        var geoQuery = landmarkGeoFire.query({
                center: [user_latitude, user_longitude], 
                radius: user_radius
        });
        var locations = [];
        var onKeyEnteredRegistration = geoQuery.on("key_entered", function (key, coordinates, distance) {
            var location = {}; 
                location.key = key;
                location.latitude = coordinates[0];
                location.longitude = coordinates[1];
                location.distance = distance;
                locations.push(location);                   
        });
        var attributes = [];
        var onReadyRegistration = geoQuery.on("ready", function() {
            ref.on('value', function (refsSnap) {
                   refsSnap.forEach((refSnap) => {
                        var list = refSnap;
                        locations.forEach(function(locationSnap) 
                        {
                            //console.log(refSnap.key, '==', locationSnap.key);
                            if (refSnap.key == locationSnap.key) 
                            {
                                var attribute = {};
                                for(var i=0; i<=properties.length-1; i++)
                                {
                                    if(properties[i] == 'key') {
                                        attribute[properties[i]] = refSnap.key;
                                        continue;
                                    }
                                    attribute[properties[i]] = list.child(properties[i]).val();
                                }
                                attribute['latitude'] = locationSnap.latitude;
                                attribute['longitude'] = locationSnap.longitude;
                                attribute['distance'] =  locationSnap.distance;
                                attributes.push(attribute);    
                            } // refSnap.key == locationSnap.key
                        }); // locations.forEach
                    }); // refsSnap.forEach
                    return Promise.resolve(attributes); <-- does not resolve (throws 'cannot read property .then')
                  //geoQuery.cancel();
                }); // ref.on
        }); // onreadyregistration      
        return Promise.resolve(attributes); <-- comes back empty
}
 
    