如果用户长时间没有写入,如何使用 Firebase Cloud Functions 在 Firebase 数据库中设置节点的值?

Posted

技术标签:

【中文标题】如果用户长时间没有写入,如何使用 Firebase Cloud Functions 在 Firebase 数据库中设置节点的值?【英文标题】:How to setValue of a node in Firebase Database using Firebase Cloud Functions if there is not write for long period by user? 【发布时间】:2020-04-25 14:33:51 【问题描述】:

我在 Firebase 实时数据库中有一个节点,它保存布尔值 true 或 false 以及更多属性。当且仅当此键为假时,我才允许用户在数据库中的同一节点上执行写操作。

当用户完成任务后,此值再次设置回 false。这类似于操作系统的临界区概念,即一次只有一个用户可以执行一项任务。

它按我的预期工作,但我面临的问题是用户是否已将此值更改为 true,但由于网络不好或他/她没有在数据库上写入。现在,没有人可以在数据库上的那个节点上写。

我想添加一个时间间隔功能,如果用户在某个时间间隔内没有执行任何写操作,比如 10 分钟并且布尔值为真。然后,我想将其设置为 false。

我知道 Firebase Cloud Function 仅在数据库写入、更新和创建操作时触发。请建议我处理此问题的方法或其他一些我可以执行的方法。任何地方都没有关于此功能的代码 sn-p。我在互联网上查找了各种资源,进行了头脑风暴,我一无所获。

【问题讨论】:

也许你应该看看 cron 作业或schedule functions。顺便说一句,我不太熟悉它,但它可能对你有帮助。 这非常接近 Doug 在此处描述的生存时间场景:medium.com/firebase-developers/…。也可以在这里查看我的答案:***.com/questions/47173560/… 我也查看了调度函数,但在我看来,它不会像我们预期的那样一直有效,因为布尔值可能不会在我们想要的时候被删除。考虑这个例子:让我们假设在某个时间 T,该节点是用户在片刻前写入的,而云函数看到它是在片刻之前写入的(当前 TImestamp - 节点的更新时间时间戳记)。现在很明显,预定的功能将在以后运行(比如 10 分钟)。现在,在时间 T+1 分钟,用户已经停止工作。在时间 T+10,节点的布尔值不会设置.. .. 自 9 【参考方案1】:

这可能不是完美的解决方案,但它是一种解决方法。 在您允许数据​​写入的地方,可能通过条件检查;您可以使用 OR 运算符简单地添加另一个条件。 只需在(该布尔值为假)或(布尔值为真但节点的最后更新时间戳超过当前时间戳超过您的时间间隔)时允许数据写入。 我应该是这样的: if(!dataSnapshot.getBoolean || (dataSnapshot.getBoolean && currentTimestamp - dataSnapshot.getTimestamp >= YOUR_TIME_INTERVAL)) //Your Logic Here

【讨论】:

???? 为什么我没想到?这个简单的技巧可能会有所帮助,但是当他/她以良好的网络回来时,我需要以某种方式阻止以前的用户停止更新节点。不过,我需要完美的解决方案,否则我将不得不尝试这个。

以上是关于如果用户长时间没有写入,如何使用 Firebase Cloud Functions 在 Firebase 数据库中设置节点的值?的主要内容,如果未能解决你的问题,请参考以下文章

如何阻止用户等待很长时间才能获得位置修复?

您如何避免使用 firebase 云功能可能出现的竞争情况?

Android应用程序地图的当前位置lat,并长时间发送到firebase吗?

在 Flutter Web 中长时间使用 Firebase 后退出

Firebase 可调用函数冷启动

第一次使用 Git 用户,推送到远程存储库需要很长时间