Облачная функция запрашивает Firestore, но возвращает пустой массив - PullRequest
0 голосов
/ 20 апреля 2020

Итак, я создаю облачную функцию, которая принимает идентификатор клиента, фильтрует документы на основе идентификатора клиента и возвращает список документов. К сожалению, он возвращает пустой массив. Я уверен, что это простое решение.

Вот облачная функция:

export const getCalendarItems = functions.https.onCall(async (data, context) => {
  const uid = data.uid;

  if (context.auth) {

    let array = [{}];

    const ref = admin.firestore().collection("photoshoots");
    const query = ref.where("customerID", "==", uid);
    query.onSnapshot((querySnapshot) => {
      querySnapshot.docs.forEach((documentSnapshot) => {
        array.push({
          ...documentSnapshot.data(),
          key: documentSnapshot.id,
        });
      });
    });

    return array;
  } else {
    return false;
  }
});

Вот код, когда я вызываю его со стороны клиента.

const uid = auth().currentUser.uid;

functions()
      .httpsCallable("getCalendarItems")({
        uid: uid
      })
      .then(result => {
        console.log(result.data);
      });

Также здесь снимок экрана Firestore.

Снимок экрана пожарного магазина

1 Ответ

0 голосов
/ 20 апреля 2020

В вашей функции есть пара ошибок.

Во-первых, вы не должны использовать onSnapshot() для запроса в облачных функциях. Вместо этого используйте get () , чтобы выполнить запрос один раз. onSnapshot() присоединяет слушателя к получению обновлений в режиме реального времени, а здесь это не то, что вам нужно.

Во-вторых, ваша функция должна возвращать обещание, которое разрешается с данными, отправляемыми клиенту. get() возвращает обещание с объектом QuerySnapshot . Вам нужно будет использовать это, чтобы получить список документов, соответствующих вашему запросу. Вы можете использовать этот список для отправки результатов клиенту.

Код функции, который вы хотите, будет значительно отличаться от того, который вы имеете сейчас, после внесения рекомендуемых изменений.

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