Javascript Firebase云功能。无法读取未定义(.ref)的属性父级
我正在尝试将以下函数部署到firebase。函数可以很好地部署,但是当函数触发时,我得到一个错误:Javascript Firebase云功能。无法读取未定义(.ref)的属性父级,javascript,node.js,firebase,Javascript,Node.js,Firebase,我正在尝试将以下函数部署到firebase。函数可以很好地部署,但是当函数触发时,我得到一个错误:无法读取未定义的属性“parent”。错误发生在引用父对象的第一行中。我在snapshot和snapshot.ref上使用了console.log,尽管snapshot存在,但snapshot.ref是未定义的 我在其他云函数中使用过snapshot.ref.parent,它运行良好。此功能有两个主要区别: (a) 这是一个onUpdate(我以前使用过onCreate和onDelete) (b)
无法读取未定义的属性“parent”
。错误发生在引用父对象的第一行中。我在snapshot和snapshot.ref上使用了console.log,尽管snapshot存在,但snapshot.ref是未定义的
我在其他云函数中使用过snapshot.ref.parent,它运行良好。此功能有两个主要区别:
(a) 这是一个onUpdate(我以前使用过onCreate和onDelete)
(b) 它是一个异步函数
exports.likeRating = functions.database.ref('Ocean/{waveId}/Likes').onUpdate(async (snapshot) =>{
let likes; let dislikes; let comments; let echoes;
await snapshot.ref.parent.child('Dislikes').once('value').then(response=>{dislikes = response.val(); return null});
await snapshot.ref.parent.child('Likes').once('value').then(response=>{likes = response.val(); return null});
await snapshot.ref.parent.child('Comments').child('CommentsCount').once('value').then(response=>{comments = response.val(); return null});
await snapshot.ref.parent.child('Echoes').once('value').then(response=>{echoes = response.val(); return null});
snapshot.ref.parent.child('Rating').set(dislikes+likes+comments+echoes);
return null;
}
你知道我为什么会犯这个错误吗?非常感谢您的帮助。该函数的运行速度将明显低于需要的速度。当您在串联等待请求时,您应该等待
承诺。所有([])
相反,返回null也是多余的
我也不知道你为什么每次都把所有的东西加起来,而不是增加评级值,但也许我没有你想得那么多
如果您查看回调的签名是函数(非空函数。包含非空函数的更改。firestore.DocumentSnapshot,可选的非空函数。EventContext)
因此,第一个参数是包含
前
和后
的类型DocumentSnapshot
,它是您应该使用的属性,例如更改.after.ref
感谢您的帮助Dominic。我重写了我的代码,它工作了。我选择添加而不是增量的原因是因为我是一个完全的noobxd。在某种相关的注释上。在我的代码的另一个部分中,我有嵌套的承诺(.then),我得到了一个关于这样做的警告-是否有更好的方法,即我应该使用async await还是有其他类似于Promise的函数。我所不知道的是什么?