Javascript 用于计算子级大小的Firebase云函数

Javascript 用于计算子级大小的Firebase云函数,javascript,firebase,firebase-realtime-database,google-cloud-functions,Javascript,Firebase,Firebase Realtime Database,Google Cloud Functions,以下是我努力实现的目标: 以及 除了位置之外,它与给出的示例相同 它还提供了如果删除了喜欢的数量,则会重新计算喜欢的数量(子项) 这是我的版本(或者至少是我的想法)它检查喜欢的数量,如果少于1,则重新计算。(只是因为如果like的数量不存在,则第一个函数将给出1,而与like的数量无关) exports.reCount=functions.database.ref('/Likes/{postID}/Number').onUpdate(事件=>{ 常量值=event.data.val; //如果该

以下是我努力实现的目标:

以及

除了位置之外,它与给出的示例相同

它还提供了如果删除了喜欢的数量,则会重新计算喜欢的数量(子项)

这是我的版本(或者至少是我的想法)它检查喜欢的数量,如果少于1,则重新计算。(只是因为如果like的数量不存在,则第一个函数将给出1,而与like的数量无关)

exports.reCount=functions.database.ref('/Likes/{postID}/Number').onUpdate(事件=>{
常量值=event.data.val;
//如果该值小于1:
if(值currentRef.set(likeData.numChildren());
}
});
对于第二个函数,我尝试使用下面的where
event.data.val
获取
Number
值,该函数在FB日志中给出了
[function:val]
,我认为可以从中获取字符串值

…和
currentRef.parent.parent.child('/Uploads/Posts/{postID}/').numchillen()
give
TypeError:collectionRef.numChildren不是函数

我阅读了大量的在线教程和API参考资料,但仍然有点困惑为什么我不能得到字符串值


我想我正在寻找一些我可以借鉴的例子。

这里有很多问题

从日志中可以看到,
event.data.val
是一个函数。您需要调用从更改的位置获取JavaScript对象:
event.data.val()

第二件事:当您已经知道要查询的位置的绝对路径时,不确定为什么要使用
currentRef.parent.parent.child
。您可以通过以下方式直接到达:

currentRef.root.ref(`/Uploads/Posts/${postID}/`)
第三件事,您正在使用单引号来尝试使用变量插值来构建这个字符串:
/Uploads/Posts/{postID}/
。为此,您需要使用backticks,并在其中使用${}插入变量(您正在使用$)


最后,正如您在其他示例代码中看到的那样,您应该使用事务来执行写入,因为两个函数完全有可能同时运行以尝试更改同一位置。我不建议把它删掉。

这里有很多地方出了问题

从日志中可以看到,
event.data.val
是一个函数。您需要调用从更改的位置获取JavaScript对象:
event.data.val()

第二件事:当您已经知道要查询的位置的绝对路径时,不确定为什么要使用
currentRef.parent.parent.child
。您可以通过以下方式直接到达:

currentRef.root.ref(`/Uploads/Posts/${postID}/`)
第三件事,您正在使用单引号来尝试使用变量插值来构建这个字符串:
/Uploads/Posts/{postID}/
。为此,您需要使用backticks,并在其中使用${}插入变量(您正在使用$)


最后,正如您在其他示例代码中看到的那样,您应该使用事务来执行写入,因为两个函数完全有可能同时运行以尝试更改同一位置。我不建议把它删掉。

我读过这篇文章,可能是重复的。我问的问题在链接中没有得到真正的回答。除了“没有按预期工作”之外,你还有什么意见吗?谢谢你的回答。我花了很多钱在这些问题上,可能是我读过的。我问的问题在链接中没有得到真正的回答。除了“没有按预期工作”之外,你还有什么意见吗?谢谢你的回答。我在这些问题上花了很多钱。谢谢你,道格。这些反馈有帮助。非常感谢!谢谢你,道格。这些反馈有帮助。非常感谢!
exports.reCount= functions.database.ref('/Likes/{postID}/Number').onUpdate(event => {
    const value = event.data.val;

    //If the value is less than 1: 
    if (value <= 1) {
        const currentRef = event.data.ref;
        const postID     = event.params.postID;             
        const postRef    = currentRef.parent.parent.child('/Uploads/Posts/{postID}/');            

        return postRef.once('value')
            .then(likeData=> currentRef.set(likeData.numChildren()));            
    }
});
currentRef.root.ref(`/Uploads/Posts/${postID}/`)