我在确定如何对某个发布查询做出反应时遇到一些麻烦。
我的出版物如下:
Meteor.publish('allData', function(){
return Data.find({TTL: {$gt: new Date()}})
})
如您所见,文档包含TTL字段。只要生存时间仍然大于当前时间,它就可以发送给客户,如果没有,它就不应该。
订阅:
this.autorun(() => {
this.subscribe('allData')
})
在初始加载时,所有数据都很好,但是每当TTL过期时,除非我重新加载页面,否则文档将保留在客户端上。无论如何反过来处理这个问题,使过期的文件从客户端消失?
答案 0 :(得分:2)
ReactiveVar和自动运行的组合为我做了诀窍。这可能是矫枉过正,但它确实有效。
let cutoffTimestamp = new ReactiveVar();
Meteor.setInterval(function() {
cutoffTimestamp.set(Date.now() - 1);
}, 60000);
Meteor.publish("myPub", function() {
this.autorun(function() {
return myCollection.find({ timestamp: { $gte: cutoffTimestamp.get(); } });
});
});
答案 1 :(得分:0)
使用remcoder:chronos软件包让自己的时间被动然后执行:
客户端:
Meteor.subscribe('allDataSince',Chronos.currentTime());
服务器:
Meteor.publish('allDataSince', t => Data.find({ TTL: { $gt: t }}));