Meteor保留旧的订阅数据,直到新的订阅日期准备就绪

Meteor保留旧的订阅数据,直到新的订阅日期准备就绪,meteor,meteor-blaze,Meteor,Meteor Blaze,我的表闪烁,因为我的订阅正在自动运行中重新订阅。当在自动运行中再次调用subscribe时,我的数据将消失,并且我有一个空表,直到data.find()再次运行。在新数据准备就绪之前,我如何保存数据 Template.table.onCreated(function () { this.autorun(() => { if (Session.get('selectedItem') && selectedSubItem.get()) { this.su

我的表闪烁,因为我的订阅正在自动运行中重新订阅。当在自动运行中再次调用subscribe时,我的数据将消失,并且我有一个空表,直到data.find()再次运行。在新数据准备就绪之前,我如何保存数据

Template.table.onCreated(function () {
  this.autorun(() => {
    if (Session.get('selectedItem') && selectedSubItem.get()) {
      this.subscribe('dataOverview', Session.get('selectedItem'), selectedSubItem.get()._id);
    }
});

Template.table.helpers({
  collection () {
    return Data.find({"item._id": Session.get('selectedItem')._id, "subItem._id": selectedSubItem.get()._id});
  },
我还尝试了另一种方法,看看下面的代码是否真的存在订阅数据问题。自动运行后,在第二次运行查找之前,表为空

Template.table.onCreated(function () {
  this.autorun(() => {
    if (Session.get('selectedItem') && selectedSubItem.get()) {
      this.subscribe('dataOverview', Session.get('selectedItem'), selectedSubItem.get()._id, () => {
        let cursor = Prjs.find({"app._id": Session.get('selectedApp')._id,"release._id": selectedRel.get()._id});
        this.tableData.set(cursor);
      });
    }
});

Template.table.helpers({
  collection () {
    return Template.instance().tableData.get();
  },
});

服务器显式地等待,直到所有数据被发送下来(新的 在删除订阅之前,订阅已准备就绪) 来自旧订阅的数据。这里的想法是为了避免忽悠你 如果需要,可以继续显示旧订阅的数据,直到 新数据准备就绪,然后立即切换到新数据 订阅的完整数据集

这意味着,一般来说,在更改订阅时 在这段时间内,您的订阅量会过多,并且会有更多的数据 客户比你严格要求的要多。这是一个非常重要的问题 您应该始终获取与现有数据相同的数据的原因 订阅(不要“过度获取”)


我想“继续显示旧订阅的数据,直到新数据准备就绪,然后立即切换到新订阅的完整数据集”,但如何做到这一点?

解决此问题的最佳解决方案是使用订阅缓存包,例如:

是最初的解决方案,是由开发的众多软件包之一。这是一个可靠的选择,但请注意,它不再被积极维护

本质上是一个分支,它解决了一些问题,并且是

当您在客户机上订阅时,这两个包都需要稍微不同的语法,并为订阅提供缓存,这将消除您在问题中描述的闪烁

// using ccorcos:subs-cache

let subsCache = new SubsCache({
  expireAter: 5,  // minutes
  cacheLimit: 10
});

Template.table.onCreated(function () {
  this.autorun(() => {
    if (Session.get('selectedItem') && selectedSubItem.get()) {
      subsCache.subscribe('dataOverview', 
                          Session.get('selectedItem'),
                          selectedSubItem.get()._id );
    }
});

您是否尝试过使用?然后创建两个被动变量,在订阅准备就绪时保存新值,在此之前保存旧值。您的问题似乎是,订阅和数据获取依赖于同一个反应变量。@MasterAM这是一个好主意,但不起作用。见上面的编辑请分享相关的模板标记。我正在使用aslagle的反应表,我们如何知道MeteoHacks:subs manager不再被维护?最后一次提交是2016年3月21日,时间不太长