Заставьте GeoFire возвращать значение null, если в зоне радиуса нет индекса

Я создаю веб-приложение с angularjs и использую firebase. Я использую geofire для возврата значений, которые находятся в пределах заданного радиуса заданной широты, долготы. Он полностью работает и возвращает то, что я хочу, когда в радиусе есть значения. Однако, когда в зоне радиуса нет значений, он ничего не возвращает. Это проблема, потому что при начальной загрузке страницы у меня есть счетчик, который запускается и заканчивается, когда что-то возвращается в обещании. Есть ли способ заставить geofire вернуть нулевое значение, если в заданном радиусе нет значений?

Это код, который я использую для получения данных:

geoQuery.on("key_entered", function(key, location, distance) {
        console.log(key + " entered query at " + location + " (" + distance + " km from center)");


  console.log(key);

      },function(error) {
        console.log("Promise was rejected with the following error: " + error);
      });
    });

Журнал console.log не будет запущен, пока не будет найдено что-то, что находится в зоне радиуса. Мне нужно, чтобы он все еще что-то возвращал, поэтому я знаю, чтобы предупредить пользователя о том, что в данной области нет предприятий. Любая помощь будет принята с благодарностью!

ОБНОВИТЬ:

Я также добавил событие «готово», думая, что оно вызовет событие «key_entered», но это не оставило меня на месте.

var onKeyExitedRegistration = geoQuery.on("key_exited", function(key, location, distance) {

console.log (ключ + завершенный запрос + местоположение + ( + расстояние + км от центра)); });

geoQuery.on("ready",function() {
  console.log(key + " moved within query to " + location + " (" + distance + " km from center)");

});


person Brennan    schedule 25.06.2016    source источник


Ответы (1)


Событие key_entered будет срабатывать только тогда, когда ключ вводит гео-запрос. Поэтому, если ни один ключ никогда не вводит запрос, он никогда не сработает.

Чтобы проверить, есть ли изначально какие-либо ключи в геозапросе, вы можете прослушивать событие ready. Это срабатывает после загрузки исходных данных, поэтому:

var keysEntered = false;
geoQuery.on("key_entered", function(key, location, distance) {
    console.log(key + " entered query at " + location + " (" + distance + " km from center)");
    keysEntered = true;
  },function(error) {
    console.log("Promise was rejected with the following error: " + error);
  });
});
geoQuery.on("ready", function() {
  console.log("initial data has loaded");
  if (!keysEntered) {
    console.log("There was no initial data, so there are no business in range (yet).");
  }
});

См. справочник по API Geofire для JavaScript для получения дополнительной информации.

person Frank van Puffelen    schedule 25.06.2016
comment
спасибо за вашу помощь, но после реализации события «готово» это все еще не помогло мне. Мне нужно получить какой-то флаг, который позволит мне знать, что здесь нет предприятий. - person Brennan; 27.06.2016
comment
Такого флага не существует, поэтому вам придется сделать свой собственный. Я добавил пример. - person Frank van Puffelen; 27.06.2016
comment
Я попытался сделать такой же флаг, но кажется, что когда он обновляется в функции «готовность ключа», он не отражается в «готовности». - person Brennan; 27.06.2016
comment
Здесь должно быть что-то еще, чего нет в фрагментах кода, которыми вы делитесь. Можете ли вы настроить jsbin/jsfiddle, который воспроизводит проблему? - person Frank van Puffelen; 27.06.2016
comment
Я нашел проблему. У меня был установлен флаг во встроенном обещании, поэтому он не был установлен вовремя. спасибо за помощь - person Brennan; 27.06.2016