Autorun is undoing my Meteor method changes


Hello guys,

I have the following autorun at onCreated, see the second autorun,
I want to set player2 as Meteor.userId() on page load if player2 is null and different to player1.

Template.Page_game.onCreated(function() {

  this.getGameId = () => FlowRouter.getParam('id');

  this.autorun(() => {
    this.subscribe('games.getById', this.getGameId());

  this.getGame = () => {
    let id = FlowRouter.getParam('id');
    return Games.findOne(id);

  this.autorun(() => {
    let game = this.getGame();
    if (!game) {

    if (!['onHold', 'inProgress'].includes(game.status)) {

    if (!game.player2 && game.player1 != Meteor.userId()) {{
          gameId: game._id
        (err, result) => {
          if (err) {


I have the following method to kick out player2, (set game.player2 = null)

export const kickPlayer2 = new ValidatedMethod({
  name: 'games.kickPlayer2',
  validate: new SimpleSchema({
    gameId: { type: String, optional: true, regEx: SimpleSchema.RegEx.Id },
  }).validator({ clean: true, filter: false }),
  run({ gameId }) {
    if (!this.userId) {
      throw new Meteor.Error('games.kickPlayer2.notLoggedIn',
        'Must be logged in to kick player2.');

    if (!this.isSimulation) {
      let game = Games.findOne(gameId);

      if (game.status != 'onHold') {
        throw new Meteor.Error('games.kickPlayer2.accessDenied',
        'Cannot kick player2 because game status is not onHold.');

      if (!game.player2) {
        throw new Meteor.Error('games.kickPlayer2.accessDenied',
        'Cannot kick player2 because it is already null.');

      if (game.player1 != this.userId) {
        throw new Meteor.Error('games.kickPlayer2.accessDenied',
        'Cannot kick player2 current user is not player1.');

      return Games.update(game._id, {
        $set: {
          player2: null


LOL, my issue is that as soon as player2 is kick out, the autorun adds him back.
How can I avoid this?



Obvious answer is not to put that in the autorun :joy:

But I figure it’s there for a reason, so… you could keep a list of kicked players on a game and check against it before adding a player


I only need to set up the player2 on page load, the only reason is the time gap until the game doc is fetched.