【问题标题】:Firebase trigger on current time当前时间的 Firebase 触发器
【发布时间】:2014-01-02 12:41:11
【问题描述】:

我创建带有事件的日历之类的东西。 我想在事件发生时为用户弹出消息。

我的解决方案:

//this code runs in loop
var offsetRef = new Firebase("https://example.firebaseio-demo.com/.info/serverTimeOffset");
offsetRef.on("value", function(snap) {
    var offset = snap.val();
    var estimatedServerTimeMs = new Date().getTime() + offset;
    fbRef.endAt(estimatedServerTimeMs).once("value", function(ss) {/*remove old events*/});
});

不可能像这样(没有循环)吗?

fbRef.endAt(Firebase.ServerValue.TIMESTAMP).on("child_added", function(snap) {/*...*/});

感谢您的回复

【问题讨论】:

    标签: firebase


    【解决方案1】:

    最好只计算一次 serverTimeOffset,然后在知道当前时间(大约)是多少后将弹出窗口包装在 setTimeout 中:

    var timeouts = [];
    offsetRef.on("value", function(snap) {
      // Cancel all previous timeouts.
      timeouts.forEach(function(i) { clearTimeout(i); });
      var estTime = new Date().getTime() + snap.val();
      var promptTime = /* Get time at which you want to prompt */
      timeouts.push(setTimeout(function showPrompt() {
        ...
      }, promptTime));
    });
    

    【讨论】:

    • 感谢您的回复,但我不明白我如何将您的代码与我的代码结合起来? :( 对我来说这一行很重要:fbRef.endAt(estTime).once("value", function(ss) {/*remove old events*/}); 如何或在哪里可以从代码中的 firebase 获取事件?谢谢
    • 您始终可以单独运行 endAt(estTime).once(...) 以删除旧事件。我的代码 sn-p 只处理为将来的事件创建提示。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    • 2011-08-25
    • 2021-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多