我正在使用云功能来侦听在Firestore上创建的新文档。
functions.firestore.document('users/{userId}')
.onCreate((snapshot, context) => {
console.log('params', context.params.userId);
});
日志显示 未定义 ,而不是通配符。
此活动从2018年12月15日午夜开始。
这是与Firestore / Cloud功能更新有关的错误吗? 以及我们如何绕过这个问题?
答案 0 :(得分:9)
当前(2018年12月15日),Firebase Functions SDK或平台似乎存在错误。
解决方法:
更新:访问父文档ID的正确方法是通过change.after.ref.parent.parent.id
或snapshot.ref.parent.parent.id
。请注意 .parent.parent
。
如果期望带有文档ID的参数,则可以使用函数的第一个参数中提供的数据来解决此问题。
下面是一个带有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
提取ID,然后添加了解决方法从快照/更改对象提取ID。< / p>
答案 1 :(得分:3)
我是负责此事件的Google员工。当Firestore处于私有alpha版本且尚未升级时,使用SDK的客户会遇到一个已知的兼容性问题。
使用低于0.6.2的SDK版本较新运行其代码的受影响客户可以响应吗?如果您运行的是0.6.1版本,则可以升级到0.6.2,而无需进行任何代码更改即可解决。