Облачные функции Firebase Объект, возможно, «неопределенный» - PullRequest
1 голос
/ 14 марта 2019

У меня есть следующий код в машинописном тексте, и я получаю эту ошибку в строке: change.after.data();, Объект возможно 'undefined':

import * as functions from 'firebase-functions'
import * as admin from 'firebase-admin'

admin.initializeApp()

export const onEditModeUpdate = 
functions.firestore.document("Settings/ShiftsEditMode").onUpdate(change=> {
    const after = change.after.data();
    const payload = {
        data: {
            temp: String(after.temp),
            conditions: after.conditions
        }
    }
    return admin.messaging().sendToTopic("Settings/ShiftsEditMode", payload)
})

enter image description here что я хочу сделать, это отправить в мое приложение уведомление, когда что-то в firestore изменится, я следую официальной документации, но получаю сообщение об ошибке, я думаю, что это связано с версией node.js. Любая помощь, пожалуйста?

Ответы [ 2 ]

2 голосов
/ 14 марта 2019

Если вы посмотрите на типы для обработчика onUpdate, аргумент для change имеет 2 необязательных свойства, after и before:

class Change<T> {
    before?: T;
    after?: T;
    constructor(before?: T, after?: T);
}

Поскольку вы хотите получить доступ к after, вам нужно будет обернуть его в условное выражение, примерно так:

functions.firestore.document("Settings/ShiftsEditMode").onUpdate(change=> {
    if (change.after) {
        const after = change.after.data();
        ...
    }
}
1 голос
/ 14 марта 2019

Ваш параметр change имеет тип Change. Если вы перейдете к нему в VSCode, вы увидите его определение здесь:

export declare class Change<T> {
    before?: T;
    after?: T;
    constructor(before?: T, after?: T);
}

Обратите внимание, что его свойства before и after являются необязательными и отмечены ? в типе. Это означает, что возможно, что значения не определены.

Вероятно, ваша конфигурация TypeScript в tsconfig.json содержит строку для "strict": true, которая говорит TypeScript не предупреждать вас всякий раз, когда вы пытаетесь получить доступ к свойству, которое может быть неопределено, без явной предварительной проверки. Это ошибка, которую вы видите здесь.

У вас есть два варианта:

1) Удалите эту строку из вашего tsconfig.json

2) Или проверьте, определен ли он первым

if (change.after) {
    const after = change.after.data();
    const payload = {
        data: {
            temp: String(after.temp),
            conditions: after.conditions
        }
    }
    return admin.messaging().sendToTopic("Settings/ShiftsEditMode", payload)
}
else {
    return null;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...