Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使流星出版物对时间作出反应_Javascript_Mongodb_Meteor - Fatal编程技术网

Javascript 使流星出版物对时间作出反应

Javascript 使流星出版物对时间作出反应,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我在弄清楚如何使订阅响应某个发布查询时遇到了一点困难 我的出版物如下: Meteor.publish('allData', function(){ return Data.find({TTL: {$gt: new Date()}}) }) 如您所见,文档包含一个TTL字段。只要生存时间仍然大于当前时间,就可以将其发送到客户端,如果不是,就不应该发送 订阅: this.autorun(() => { this.subscribe('allData') }) 在初始加载时,

我在弄清楚如何使订阅响应某个发布查询时遇到了一点困难

我的出版物如下:

Meteor.publish('allData', function(){
    return Data.find({TTL: {$gt: new Date()}})
})
如您所见,文档包含一个TTL字段。只要生存时间仍然大于当前时间,就可以将其发送到客户端,如果不是,就不应该发送

订阅:

this.autorun(() => {
    this.subscribe('allData')
})
在初始加载时,所有数据都正常,但只要TTL过期,文档就会保留在客户机上,除非我重新加载页面。是否有任何方法可以反应性地处理此问题,使过期的文档从客户端消失?

使用包使时间本身反应,然后执行以下操作:

客户:

Meteor.subscribe('allDataSince',Chronos.currentTime());
服务器:

Meteor.publish('allDataSince', t => Data.find({ TTL: { $gt: t }}));

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(); } });
    });
});

问题是,
newdate()
不是反应性数据,出版物不会随着时间的变化而重新评估。这是有道理的,与约翰·阿尔托夫的答案相似,但似乎不起作用。这可能与我在
/imports
文件夹中工作有关吗?可能-您可能必须导入ChronosMeteor发布函数,因为它们本身不能处理反应性。您应该在发布函数中的
autorun
中添加反应性。然后
chronos
就可以工作了。要获得对
自动运行的支持,您应该使用package。谢谢@Mitar-我将答案更改为在订阅中使用反应时间,而不是出版物本身。谢谢您的回答Johan,您认为Michel Floyd的答案与您的答案类似吗?考虑到它使用一个反应性包而不是反应性变量,Michel的回答很好,因为它使时间成为一个反应性数据源,所以它解决了您的具体问题。我的回答展示了如何做出一些反应性的东西,而这些反应性的东西不是反应性的,并且可能对偶然发现这个问题的其他人有益。