Объедините два массива в Firebase Cloud Function - PullRequest
0 голосов
/ 21 января 2020

У меня есть эти два узла, которые мне нужно получить за один HTTP-вызов. Я пытаюсь добиться этого с помощью async / await, чтобы получить два узла, а затем объединить их с помощью concat или forEach. Но кажется, что, хотя я жду ответов, внутри функции они все еще обещания, а не сами данные. Это мой базовый c пример:

exports.searchVisit = functions.https.onRequest(async (req, res) => {
  const today = new Date(Date.now());
  let todayVisits = await admin.database().ref('/visits/').once('value');
  let frequentVisits = await admin.database().ref('/frequent_visits/').once('value');

  console.log(todayVisits); // Prints an object (I guess it is a promise)

  res.status(200).send(todayVisits); // Returns correctly the data on visits collection
});

Как мне добиться того, чтобы сегодня возвращались посещения и частые посещения вместе? Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 22 января 2020

В вашем коде todayVisits - это объект типа DataSnapshot . Это не обещание. Регистрация этого объекта DataSnapshot вряд ли будет полезна. Если вы хотите видеть необработанные данные внутри этого снимка, вызовите val () для него, чтобы получить объект JavaScript со всем набором данных в этом снимке. Это также то, что вы, вероятно, хотите отправить клиенту (а не все содержимое DataSnapshot).

1 голос
/ 22 января 2020

Следующий код, объединяющий два JavaScript объекта, полученных с val(), как объяснил Даг, должен выполнить трюк:

exports.searchVisit = functions.https.onRequest(async (req, res) => {
  const today = new Date(Date.now());
  let todayVisits = admin.database().ref('/visits/').once('value');
  let frequentVisits = admin.database().ref('/frequent_visits/').once('value');

  const [todayVisitsSnap, frequentVisitsSnap] = await Promise.all([
          todayVisits,
          frequentVisits
  ]);

  res.status(200).send({ ...todayVisitsSnap.val(), ...frequentVisitsSnap.val() }); 
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...