Контекстные параметры облачных функций возвращают неопределенный - PullRequest
0 голосов
/ 15 декабря 2018

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

functions.firestore.document('users/{userId}')
        .onCreate((snapshot, context) => {
            console.log('params', context.params.userId);
});

Журналы показывают undefined вместо параметра с подстановочными символами.

Это начало происходить с 15 декабря 2018 года в полночь.

Это ошибка, связанная с обновлением функций Firestore / Cloud?и как мы можем обойти эту проблему?

Ответы [ 2 ]

0 голосов
/ 15 декабря 2018

Я сотрудник Google, работающий над инцидентом.Существует известная проблема совместимости для клиентов, использующих SDK, когда Firestore находился в закрытой альфа-версии и не обновлялся.

Может затронуть клиентов, использующих свой код с версией SDK новее , чем 0,6.2 отвечать?Если вы используете версию 0.6.1, вы можете обновить ее до 0.6.2 без внесения изменений в код для исправления.

0 голосов
/ 15 декабря 2018

Похоже, что в SDK или платформе Firebase Functions (15 декабря 2018 г.) есть ошибка.

Обходной путь:

Обновление Правильный способ доступа к идентификатору родительского документа - через change.after.ref.parent.parent.id или snapshot.ref.parent.parent.id.Обратите внимание на .parent.parent.

Если вы ожидаете параметры с идентификаторами документов, вы, вероятно, можете обойти эту проблему, используя данные, предоставленные в первом аргументе вашей функции.

Вот пример с триггерной функцией onCreate:

export const myCreateTriggeredFn = firestore
  .document("user/{userId}/friends/{friendId}")
  .onCreate((snapshot, context) => {

    let { userId, friendId } = context.params;

    if (typeof userId !== "string" || typeof friendId !== "string") {
      console.warn(`Invalid params, expected 'userId' and 'friendId'`, context.params);

      userId = snapshot.ref.parent.parent.id;
      friendId = snapshot.id;
    }

    // Continue your logic here...
  });

И для триггерной функции onWrite:

export const myChangeTriggeredFn = firestore
  .document("user/{userId}/friends/{friendId}")
  .onWrite((change, context) => {

    let { userId, friendId } = context.params;

    if (typeof userId !== "string" || typeof friendId !== "string") {
      console.warn(`Invalid params, expected 'userId' and 'friendId'`, context.params);

      userId = change.after.ref.parent.parent.id;
      friendId = change.after.id;
    }

    // Continue your logic here...
  });

Для полноты ивыделите ошибку, оба примера показывают, как вы обычно извлекаете идентификаторы из context.params, а затем добавляете обходной путь для извлечения идентификаторов из объектов моментального снимка / изменения.

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