Облачная функция Firebase не запускается - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь запустить следующую облачную функцию:

exports.getUserData = functions.firestore
  .document('UserData/{id}')
  .onWrite(async (snap, context) => {
    const uid = snap.data.id;
    let uData;
    console.log("onCreate called. uid="+uid);
    await admin.auth().getUser(uid)
  .then(function(userRecord) {
    // See the UserRecord reference doc for the contents of userRecord.
    console.log('Successfully fetched user data:', userRecord.toJSON());
    uData = userRecord.toJSON();
  })
  .catch(function(error) {
    console.log('Error fetching user data:', error);
  });

    await admin
      .firestore()
      .doc('UserData/${uid}')
      .set({
        userRecord : uData
      });

    return null;
  });

Все правильно развернуто, как я вижу в консоли. Но добавление / обновление do c в коллекции просто не вызывает функцию (в журнале ничего не отображается).

Ответы [ 2 ]

1 голос
/ 02 марта 2020

Пара вещей, поскольку я вижу несколько проблем

  • Мне кажется, что вы хотите запускать эту функцию каждый раз, когда появляется новая коллекция UserData. Если это так, вы должны использовать триггер onCreate. onWrite запускается каждый раз, когда do c обновляется, создается или удаляется.

  • Ваша функция создает бесконечный l oop, если вы используете onWrite. Вы обновляете коллекции, которые будут запускать одну и ту же функцию снова и снова.

  • Первый аргумент функции - это не snapDo c, если вы используете onWrite. Проверьте документацию

  • Эта часть:

    await admin
      .firestore()
      .doc('UserData/${uid}')
      .set({
          userRecord : uData
      });
    

'UserData / $ {uid}' является строкой не шаблонная строка. Используйте обратную галочку `не одинарную кавычку '

  • Как сказал @ renaud-tarne c, используйте context.params для получения параметра id
1 голос
/ 02 марта 2020

Кажется, что с помощью

exports.getUserData = functions.firestore
  .document('UserData/{id}')
  .onWrite(async (snap, context) => {

    const uid = snap.data.id;
    //...
  });

вы хотите присвоить переменной uid значение подстановочного знака {id} в 'UserData / {id}'.

Для этого вы должны использовать context объект, как указано ниже:

const uid = context.params.id;

и, как объяснено здесь в do c.

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