gpt4 book ai didi

javascript - Meteor:使用reactiveVar观察集合

转载 作者:行者123 更新时间:2023-12-03 10:54:21 25 4
gpt4 key购买 nike

我有一个应用程序,用户可以在其中管理多个闹钟(设置新闹钟、编辑它或暂停)

当到达闹钟时间时,我需要通知用户。如果用户单击“暂停”,time_end 字段就会添加 5 分钟。

如何跟踪何时到达闹钟时间?

我尝试过使用collection.observe() - 但它只能在服务器启动时工作一次

服务器:Meteor Startup

var expiredAlarms = Alarms.find({$and: [{"time_end": {$lt: moment()._d}}, {notification_sent: false}]});

expiredAlarms.observe({
added: function(doc) {
console.log('alarm timeout has been reached');
processAlarmEnd(); //set notification_sent to true
},
removed: function(doc) {
console.log('A notification has been sent');
}
});

上述代码仅在应用程序启动并处理过期警报的所有通知时有效 - 但一旦新警报过期,就不会发生任何事情。我的猜测是因为 moment()._d 没有改变,并且一遍又一遍地调用相同的旧查询。

我应该将此代码放入 Tracker.autorun 中 - 这会有帮助吗?对于做得更好/更聪明有什么建议吗?

最佳答案

要使代码将来执行,您需要使用setTimeout。在您的 observe 查询中,不要关心时间,在 added 回调中,计算闹钟响起之前还剩多少毫秒,然后使用 setTimeout 在该毫秒数之后调用 processAlarmEnd

您可能还需要在 removed 回调中使用 clearTimeout 取消 setTimeout

关于javascript - Meteor:使用reactiveVar观察集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28318758/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com