Проверка Firebase, если узел существует, возвращает true или false - PullRequest
0 голосов
/ 23 марта 2020

У меня есть база данных реального времени Firebase: Firebase tree

Я делаю приложение для знакомств, похожее на трут для моего бакалавра. Сейчас я создаю систему соответствия.

Я создал слушатель onCreate, чтобы проверять, когда пользователь нажимает кнопку «Мне нравится», и проверять, нажал ли другой пользователь, как на текущем пользователе. Так вот, что я пытался.

exports.UserPressesLike = functions.database
  .ref('/users/{userId}/matches/{otherUserId}')
  .onCreate((snapshot, context) => {
    // Grab the current value of what was written to the Realtime Database.
    const original = snapshot.val();
    const userId = context.params.userId;
    const matchedUserId = context.params.otherUserId;
    const a = checkUserMatch(userId, matchedUserId);
    if (a === true) {
      console.log('Its a match');
    } else {
      console.log('There is no match');
      console.log(a);
    }

    return null;
  });

checkUserMatch = async (userId, matchedUserId) => {
  const snapshot = await admin
    .database()
    .ref('/users/' + matchedUserId + '/matches/' + userId)
    .once('value')
    .then(snapshot => {
      // let tempuserId = snapshot.val();
      // if()
      return true;
    });
};

Я хочу, чтобы checkUserMatch возвращал значение true, если этот узел существует, и значение false, если такого узла нет.

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Ваш checkUserMatch является асинхронным (как показывает тот факт, что вы пометили его async), что означает, что он не сразу возвращает значение, а возвращает объект, который в конечном итоге будет содержать значение (так что вызываемое обещание).

Чтобы вызвать функцию async, необходимо вызвать ее с помощью await:

const a = await checkUserMatch(userId, matchedUserId);

Это означает, что вам также необходимо отметить функцию, содержащую вызов как async, поэтому:

exports.UserPressesLike = functions.database
  .ref('/users/{userId}/matches/{otherUserId}')
  .onCreate(async (snapshot, context) => {

Обратите внимание, что я настоятельно рекомендую не продолжать, пока вы не узнали больше об асинхронных API, Promises и async / await. Например, просмотрев сериал Дуга Learn JavaScript Promises с HTTP-триггерами в облачных функциях .

1 голос
/ 23 марта 2020

После исправления Puf, вы можете проверить, если snapshot.val() !== null, или использовать ярлык snapshot.exists().

И вам лучше переименовать ваш const snapshot в const isLiked, а затем фактически вернуть это isLiked (или эта функция вернет undefined).

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