Создание REST API-контроллера поверх Firebase Admin SDK - PullRequest
0 голосов
/ 08 октября 2019

Я пытаюсь построить REST API-контроллер (используя среду начальной загрузки) поверх Firebase admin sdk , но я сталкиваюсь со следующей проблемой:

Предположим, если я получузапрос GET , и он должен прочитать данные из базы данных Firebase Realtime и вернуться в качестве ответа на этот запрос GET . Чтение данных из базы данных Firebase Realtime возможно только с использованием асинхронных прослушивателей , так как я могу это реализовать:

  • Нужно ли ждать до асинхронный вызов завершается, чтобы дать ответ на этот GET запрос? (Если да, то какие-либо примеры)
  • Или какой-либо другой лучший способ следовать здесь?

1 Ответ

0 голосов
/ 08 октября 2019

Что-то вроде этого должно работать:

    final CountDownLatch latch = new CountDownLatch(1);
    final AtomicReference<Object> value = new AtomicReference<>(null);
    final AtomicReference<Exception> exception = new AtomicReference<>(null);

    ref.getReference().addListenerForSingleValueEvent(new ValueEventListener() {
      @Override
      public void onDataChange(DataSnapshot snapshot) {
        value.set(snapshot.getValue());
        latch.countDown();
      }

      @Override
      public void onCancelled(DatabaseError error) {
        exception.set(error.toException());
        latch.countDown();
      }
    });

    latch.await(30, TimeUnit.SECONDS);
    if (exception.get() != null) {
      // handle error
    }

    Object result = value.get();
    // return result to user

Я бы порекомендовал переместить всю логику синхронизации (с защелкой и атомными ссылками) в новый класс многократного использования, чтобы код стал простым иболее читабельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...