Я хочу создать функцию, возвращающую обещание, которая использует библиотеку geofire для запроса firebase на основе широты, долготы и радиуса. Как создать зависимость от функции обратного вызова geofire для события 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);
});
}
Вызов 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'
, который срабатывает, когда приходят все начальные ключи.