Firebase云函数未启动

j0pj023g  于 2023-05-01  发布在  其他
关注(0)|答案(2)|浏览(142)

我正在尝试运行以下云函数:

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;
  });

我在控制台中看到,它部署得很好。但是在集合中添加/更新文档并不会触发该函数(日志中没有显示任何内容)。

mctunoxg

mctunoxg1#

有几件事,我看到了一些问题

  • 在我看来,您希望在每次有新的UserData集合时触发这个函数。如果是这种情况,您应该使用触发器onCreateonWrite在每次更新、创建或删除文档时触发。
  • 如果你使用onWrite,你的函数将创建一个无限循环。您正在更新集合,这些集合将一遍又一遍地触发相同的函数。
  • 如果使用onWrite,则函数的第一个参数不是snapDoc。检查documentation
  • 本部分:
await admin
  .firestore()
  .doc('UserData/${uid}')
  .set({
      userRecord : uData
  });

“UserData/${uid}”是字符串,而不是模板字符串。使用反勾“非单引号”

  • 正如@renaud-tarnec所说,使用上下文。params获取id参数
jyztefdp

jyztefdp2#

似乎通过做

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

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

您要将“UserData/{id}”中{id}通配符的值分配给uid变量。
为此,您应该使用context Object,如下所示:

const uid = context.params.id;

就像在文档中解释的那样。

相关问题