使流星出版物对时间具有反应性

时间:2016-05-28 22:31:22

标签: javascript mongodb meteor

我在确定如何对某个发布查询做出反应时遇到一些麻烦。

我的出版物如下:

Meteor.publish('allData', function(){
    return Data.find({TTL: {$gt: new Date()}})
})

如您所见,文档包含TTL字段。只要生存时间仍然大于当前时间,它就可以发送给客户,如果没有,它就不应该。

订阅:

this.autorun(() => {
    this.subscribe('allData')
})

在初始加载时,所有数据都很好,但是每当TTL过期时,除非我重新加载页面,否则文档将保留在客户端上。无论如何反过来处理这个问题,使过期的文件从客户端消失?

2 个答案:

答案 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 }}));