在geofire的'key_entered`事件上创建承诺的问题

问题描述 投票:0回答:1

我想创建一个函数,返回promise,它使用geofire库根据lat lng和radius查询firebase。如何为'key_entered'事件创建对geofire回调函数的依赖,完成其回调函数执行,然后解决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);
  });
}
node.js firebase-realtime-database geofire
1个回答
0
投票

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);
    });
  });
}

这可确保在第一个密钥进入时解析promise。如果要在所有密钥进入时解析promise,请为on('ready'添加一个监听器,当所有初始密钥都进入时会触发该监听器。

© www.soinside.com 2019 - 2024. All rights reserved.