Запрос подкатегории в firestore с помощью облачных функций - PullRequest
0 голосов
/ 27 мая 2020

Я новичок в облачных функциях и пытаюсь создать функцию уведомлений в своем приложении. Уведомления хранятся в подгруппе. Ошибка, отображаемая в журналах:

TypeError: невозможно прочитать свойство 'first_name' неопределенного значения в Promise.all.then.result (/srv/index.js:29:41).

В чем может быть проблема?

'use-strict'

const functions = require('firebase-functions');
const admin = require ('firebase-admin');
admin.initializeApp(functions.config().firebase);


exports.sendNotification = functions.firestore.document("Employee_Details/{user_id}/Notifications/{notification_id}")
.onWrite((change , context) =>{

  const user_id = context.params.user_id;
  const notification_id = context.params.notification_id;

  //console.log("User ID:" + user_id + "| Notification ID : " + notification_id);

  return admin.firestore().collection("Employee_Details").doc(user_id).collection("Notifications").doc(notification_id).get().then(queryResult => {

    const from_user_id = queryResult.data().from;

    const from_data = admin.firestore().collection("Employee_Details").doc(from_user_id).get();
    const to_data = admin.firestore().collection("Employee_Details").doc(user_id).get();

  //  console.log("FROM_DAT:" + from_data + "TO_DATA:" + to_data);


    return Promise.all([from_data , to_data]).then(result => {


      const from_name = result[0].data().first_name;
      const to_name =  result[1].data().first_name;

      return console.log("FROM: "+ from_name + "TO:" + to_name);


    });


  });



});

Firestore structure

Sub-collection

1 Ответ

1 голос
/ 29 мая 2020

Если прикрепленные вами скриншоты относятся к значениям, которые вы пытаетесь получить, в Employee_Details нет документа с идентификатором Employee_Details.Gh82W1.Notifications.KR0CN4.from. Вот почему result[0] не определено, потому что он ничего не может получить.

Есть ли причина, по которой вы думаете, что используете старый синтаксис? Мне это кажется правильным. Вы используете те же методы, что и в примере кода для nodejs. Единственное изменение, которое я бы сделал, - это избегать использования admin.firestore() каждый раз. Примерно так:

const db = admin.firestore();
const from_data = db.collection("Employee_Details").doc(from_user_id).get();
const to_data = db.collection("Employee_Details").doc(user_id).get();

Но это личное предпочтение.

...