Получение объекта, возможно, не определено при попытке развернуть функцию FCM - PullRequest
0 голосов
/ 13 июля 2020

Я пытаюсь получить данные из документа в базе данных firebase с помощью функций FCM.

export const sendToDevicePaidBribe = functions.firestore
  .document('PaidBribe/{bribeId}')
  .onCreate(async snapshot => {


    const report = snapshot.data();
    const querySnapshot = await db
      .collection('users')
      .doc(report.uid).get();

    const token = querySnapshot.data();

    const payload: admin.messaging.MessagingPayload = {
      notification: {
        title: 'Report Submited!',
        body: `Report id: ${report.id} on ${report.date}`,
        icon: 'your-icon-url',
        click_action: 'FLUTTER_NOTIFICATION_CLICK'
      }
    };

    return fcm.sendToDevice(token.fcmToken, payload);
  });

Когда я пытаюсь развернуть функцию, появляется следующая ошибка.

src/index.ts:48:30 - error TS2532: Object is possibly 'undefined'.
    return fcm.sendToDevice(token.fcmToken, payload);
                            ~~~~~

Может ли кто-нибудь объяснить мне, почему возникает эта ошибка?

1 Ответ

1 голос
/ 13 июля 2020

Поскольку Firestore не дает вам гарантии, что какой-либо заданный документ существует до его запроса, вы должны проверить это самостоятельно в коде. Обратите внимание на документы API, что snapshot.data () может возвращать undefined в случае, если документ не существует. TypeScript заставляет вас иметь дело с возможностью неопределенности в вашем коде. Вы можете сделать это, просто проверив его перед использованием следующим образом:

const token = querySnapshot.data();
if (token) {
    // work with token safely here
}

Внутри блока if (token) TypeScript заверяет вас, что token не может быть неопределенным, и вы можете безопасно ссылаться свойства на нем.

...