Проблема с созданием обещания для события `key_entered` для geofire - PullRequest
0 голосов
/ 08 апреля 2019

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

1 Ответ

0 голосов
/ 08 апреля 2019

Звонок на 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', который срабатывает, когда все начальные ключи ключи пришли.

...