我如何发布一段数据,然后停止对它的反应

How do I publish a piece of data and then stop reacting to it?

本文关键字:然后 数据 何发布 一段      更新时间:2023-09-26

我想做一个主页,其中发布了几条数据,但只有当用户第一次访问该页面时:一个人会得到最近发布的10篇文章,但仅此而已-它不会不断更改。

是否有一种方法可以使内置的pub/sub机制在一段时间或记录数量或其他机制后关闭?

现在我正在使用一个非常简单的设置,它不会"关闭":

latestNews = new Mongo.Collection('latestNews');
if (Meteor.isClient) {
  Meteor.subscribe("latestNews");
}
if (Meteor.isServer) {
  Meteor.publish('latestNews', function() {
    return latestNews.find({}, {sort: { createdAt: -1 }, limit : 10});
  });
}

在Meteor中实现的pub/sub模式都是关于响应式数据更新的。在你的情况下,这意味着如果一篇文章的作者或最后更新日期发生了变化,那么用户将立即在他们的主页上看到这一变化。

但是你想发送一次数据,而不是再次更新它。
Meteor有一个内置功能来处理这个场景:方法。方法是客户机告诉服务器执行计算和/或发送纯非响应性数据的一种方式。

//Server code
var lastTenArticlesOptions = {
  sort : { 
    createdAt : -1
  },
  limit : 10
}
Meteor.methods({
  'retrieve last ten articles' : function() {
    return latestNews.find({}, lastTenArticlesOptions).fetch()
  }
})

请注意,与出版物相反,我们不发送Mongo.Cursor !在发布中使用游标是一种方便的(也称为神奇的)方式,它告诉服务器要发送哪些数据。
在这里,我们通过fetch光标直接发送数据,以获得文章数组,然后将自动EJSON.stringify并发送到客户端。


如果您需要向客户端发送响应性数据,并在稍后的时间点停止推送更新,那么您最好的选择是暂时依赖于发布/订阅,然后手动stop发布(服务器端)或订阅(客户端):

Meteor.publish('last ten articles', function() {
  return latestNews.find({}, lastTenArticlesOptions)
})
var subscription = Meteor.subscribe('last ten articles')
//Later...
subscription.stop()

在服务器端存储发布句柄(this),然后对其进行操作。

停止订阅或发布不会破坏已经发送的文档(用户不会看到最近的十篇文章突然消失)。

相关文章: