Search code examples
meteormeteor-publications

Efficient pattern for updating a subscription limit argument


I'm using subs-manager, but the answer to this may be independent of that lib.

I have a subscription with a single limit argument. Currently, when I call subs.subscribe 'subname', newLimit, another subscription is added.

image

The old subscriptions are still there. I don't want Meteor to spend time maintaining the old, lower-limit subscriptions. Instead of adding a new subscription, I want to update the argument of the old subscription. What is the best way to do this?

Note that I also don't want to completely tear down eg 'subname', 20 before subscribing to 'subname', 40, because I don't want Meteor to do the extra work of resending the first 20 docs – I want it to just send docs 21 - 40.


Solution

  • You could have a look at your subscription's stop() method. According to the docs:

    stop() [cancels] the subscription. This will typically result in the server directing the client to remove the subscription's data from the client's cache.

    So the way I see it, you could maybe manage to do:

    // globals or whatever
    var previousSub, newSub;
    
    // somewhere else
    newSub = Meteor.subscribe('subname', newLimit, function () {
      if (previousSub)
        previousSub.stop();
      previousSub = newSub;
    });