在 geofire 的“key_entered”事件上创建承诺的问题

Issue with creating a promise on `key_entered` event for geofire

我想创建一个函数,returns promise,它使用 geofire 库根据经纬度和半径查询 firebase。如何为'key_entered'事件创建对geofire回调函数的依赖,完成其回调函数的执行,然后resolve promise。

function geofireQuery(lat, lng, rad){
  const result = [];
  return new Promise((resolve, reject) => {
    const geofireRef = new GeoFire(admin.database().ref('geofire'));
    geofireRef.query({
      center: [lat, lng],
      radius: rad //kilometers
    }).on('key_entered', (key, location, distance) => {
        result.push(key);
    });
    resolve(result);
  });
}

resolve 的调用需要在 on('key_entered':

function geofireQuery(lat, lng, rad){
  const result = [];
  return new Promise((resolve, reject) => {
    const geofireRef = new GeoFire(admin.database().ref('geofire'));
    geofireRef.query({
      center: [lat, lng],
      radius: rad //kilometers
    }).on('key_entered', (key, location, distance) => {
        result.push(key);
        resolve(result);
    });
  });
}

这可确保在第一个密钥进入时解决承诺。如果您想在所有密钥进入时恢复承诺,请为 on('ready' 添加一个侦听器,当所有初始密钥进入时触发进来