我想创建一个函数,返回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);
});
}
对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'
添加一个监听器,当所有初始密钥都进入时会触发该监听器。