Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/38.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Firebase云功能。无法读取未定义(.ref)的属性父级_Javascript_Node.js_Firebase - Fatal编程技术网

Javascript Firebase云功能。无法读取未定义(.ref)的属性父级

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)

我正在尝试将以下函数部署到firebase。函数可以很好地部署,但是当函数触发时,我得到一个错误:
无法读取未定义的属性“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的函数。我所不知道的是什么?