Объект, возможно, не определен, даже если я проверю, существует ли он с условным - PullRequest
0 голосов
/ 23 февраля 2020

Я пытаюсь написать облачную функцию для Firebase. Даже если я проверю, существует ли change.after, как упомянуто здесь , я все равно получаю объект, возможно, неопределенную ошибку.

Вот мой код:

export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {  
  let userId;
  if(change.after){
    const after=change.after.data();
    userId=after.ownerId;
  }

Вот скриншот в vscode: enter image description here

Что я делаю не так? Спасибо!

1 Ответ

3 голосов
/ 23 февраля 2020

Как вы упомянули, вы проверяете, существует ли change.after. Когда это происходит, вы вызываете метод с именем data(), который может вернуть FirebaseFirestore.DocumentData или undefined. Это означает, что переменная after может относиться к одному из этих типов, так как в результате метода data() мог бы быть возвращен undefined.

. Вы также должны проверить, есть ли typeof after !== 'undefined', прежде чем получить доступ к его свойству.

export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {  
  let userId;
  if (change.after) {
    // change after exists
    const after = change.after.data();

    // after can be undefined as data() could return undefined
    if (typeof after !== 'undefined') {
      userId = after.ownerId; // it's safe to access ownerId
    }
  }
}

Кроме того, если вы используете typcript v3.7 и выше, вы можете использовать Необязательное сцепление . Код будет выглядеть примерно так:

export const toDashboardInfo = functions.firestore.document('maps/{mapId}').onWrite((change, context) => {  
  const after = change.after?.data();
  const userId = after?.ownerId || 'default value';
}

Вы можете пропустить часть || 'default value', если userId может быть undefined, если данные не возвращаются или ownerId не возвращается.

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