Как получить поле документа из заданного c документа в Firestore, используя Typescript? - PullRequest
0 голосов
/ 19 апреля 2020

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

Property 'snapshot' does not exist on type 'DocumentReference<DocumentData>'. Did you mean 'onSnapshot'?

Я упростил код до одной облачной функции с наиболее важной части, имеющие комментарии перед ними. Я пытаюсь получить поле псевдонима от personFrom documentReference.

const db = admin.firestore();
const fcm = admin.messaging();

export const sendToDevice = functions.firestore
    .document('messages/{groupChatId}/{chatId}/{message}')
    .onCreate(async (snapshot: { data: () => any; }) => {


        const message = snapshot.data();
        if (message != null) { 
            const querySnapshot = await db
                .collection('messages')
                .doc(message.idTo)
                .collection('tokens')
                .get();


// **** This is where I am referencing the document where I want to get its fields ****

var personFrom = db.collection('messages').doc(message.idFrom).snapshot();

        const tokens = querySnapshot.docs.map((snap: { id: any; }) => snap.id);

        const payload: admin.messaging.MessagingPayload = {
            notification: {
// **** Right here in the title parameter is where I am attempting to retrieve a specific field of data from the document I mentioned above ****
                title: "New Message from" + personFrom["nickname"]+ "!",
                body: message.content,
                icon: 'your-icon-url',
                click_action: 'FLUTTER_NOTIFICATION_CLICK'
            }
        };

        return fcm.sendToDevice(tokens, payload);

        } else {
            return undefined
        }
    });

1 Ответ

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

В JavaScript вы используете get () в DocumentReference для получения документа. Он возвращает обещание, которое разрешается с помощью объекта DocumentSnapshot :

const personFrom = await db.collection('messages').doc(message.idFrom).get();
const data = personFrom.data();

Теперь у данных есть объект JavaScript, который описывает содержимое документа.

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