Meteor Tracker自动运行2次

时间:2016-07-15 05:55:31

标签: meteor

此Meteor客户端代码尝试使Tracker.autorun运行一次,但因为它似乎必须运行两次,一次用于设置,一次用于反应。 哪个好,但是它开了3次。一旦设置和2响应,即使服务器仅更新user.profile.abc一次。

为了测试它,我在mongodb控制台中运行此代码,附带的iamge是我得到的,它确认它会触发两次。

如何让它只运行一次以响应用户集合中的更改?感谢

db.users.update({_id: Meteor.userId()},{$set: {'profile.ABC': ['a','b']}}).pretty()

enter image description here

//client
Meteor.call('cleanABC', (err) => {
  if (!err) {
    ABCListener();
  }
});

ABCListener: () => {
  Tracker.autorun(() => {
    if (Meteor.userId()) {
      console.log('auto run invoked');
      if (Meteor.user().profile.ABC) {
        const myArray = Meteor.user().profile.ABC;
        //myFunction(myArray);
        console.log('condition true');
      } else {
        console.log('condition false');
      }
    }
  });
}

//server
'cleanABC': function() {
  return Meteor.users.update({
    _id: Meteor.userId()
  }, {
    $unset: {
      'profile.ABC': ''
    }
  });
}

//and some where else in the code
  Meteor.users.update({
  _id: userId
}, {
  $set: {
    'profile.ABC': myArray
  }
}, (err) => {
  if (!err) {
    console.log('just sent the array');
  }
});

1 个答案:

答案 0 :(得分:1)

我认为问题是你每次调用方法时都只是调用Tracker.autorun。

我认为如果您将客户端代码更改为:

//client
  ABCListener: () => {
  Tracker.autorun(() => {
    if (Meteor.userId()) {
      console.log('auto run invoked');
      if (Meteor.user().profile.ABC) {
        const myArray = Meteor.user().profile.ABC;
        //myFunction(myArray);
        console.log('condition true');
      } else {
        console.log('condition false');
      }
    }
  });
}
Meteor.call('cleanABC');

它应该有用。