如何在特定时间后更新firebase数据库中的值,比如10分钟后?

Posted

技术标签:

【中文标题】如何在特定时间后更新firebase数据库中的值,比如10分钟后?【英文标题】:How to update a value in firebase database after a specific time, like after 10 minutes? 【发布时间】:2017-12-14 05:34:33 【问题描述】:

有一个与我的项目关联的 Firebase 数据库。当值更改为 2 时,10 分钟后我希望相同的字段更新为 1。该项目在 android 上。 有什么办法吗?用于创建特定时间间隔?

【问题讨论】:

我不知道你尝试了什么。您可以使用 java timer 定期轮询数据库。 您可以创建一个在后台运行的服务并在 10 分钟后更新 firebase。 似乎是可观察对象的有效用例。 请提供更多细节。您可以在 Android 中使用计时器类,或在 javascript 中部署 Firebase 函数。 @Ronak Joshi,但我只想在值更改为 2 时更新。应该像带计时器的触发器一样工作。 【参考方案1】:

我建议您编写一个 JavaScript 函数,该函数在 10 分钟后写入新值,并编写一个 Firebase 写入事件触发器,以在您看到值发生变化且值为 2 时调用该函数。

如果您在 Android App 中编写此功能,如果用户断开手机与互联网的连接,它可能无法及时更新。

Documentation for Firebase Function

阅读本文档。作为应用程序的后端,它相当简单,并且是 Firebase 不可或缺的一部分。

【讨论】:

这是完全正确的,但有一个问题。我们不能延迟调用我们的云函数,我的意思是 10 分钟可以,但是 10 小时是问题,因为超时,发布/订阅函数也不是解决方案,因为它只支持调度调用,我们需要在之后准确地调用我们的函数一次有些延迟,是我遗漏了什么还是真的没有解决方案? 解决的办法就是,为新的值放一个监听器,每次添加一个新的值,都会作为监听器的结果启动一个新的线程。要么创建一个预定服务,然后将新值提交给它,要么只是让侦听器线程在给定时间内休眠。 感谢 Bugs Buggy 的快速回复。所以你说云功能没有解决方案,我们应该创建我们的服务? 没有没有。您可以简单地为其编写方法,这些方法实际上会在给定时间后执行。我很久没有使用 Node 了,但是 Java 中有一个工具可以让你创建“ScheduledThreads”。仅在您的云函数中执行此操作。【参考方案2】:

您可以使用 Cloud Functions for Firebase 执行此操作,或者使用 Android 中的计时器:

final DatabaseReference ref = ...;
ref.addListenerForSingleValueEvent(new ValueEventListener() 
  void onDataChanged(DataSnapshot snapshot) 
    new android.os.Handler().postDelayed(
      new Runnable() 
        public void run() 
            ref.set(1);
        
      , 
    10*60*1000);
  
  ...

灵感来自What is the equivalent to a JavaScript setInterval/setTimeout in Android/Java?

【讨论】:

以上是关于如何在特定时间后更新firebase数据库中的值,比如10分钟后?的主要内容,如果未能解决你的问题,请参考以下文章

在特定时间后更新 Firebase 实时数据库 [重复]

如何使用firebase实时数据库ios增加特定节点中的值

如何使用 Cloud Functions for Firebase 更新 Firebase 实时数据库中的值

如何设置计时器以更新firebase数据库中的数据

更新 Firebase 中键的值

如何在特定时间触发来自firebase的通知?