Tracker.autorun中的订阅导致发布回调多次触发

时间:2019-05-22 18:49:54

标签: javascript reactjs meteor

我正在一个ReactJS和Meteor项目中,我发现一个奇怪的行为要在这里描述:

内部有一个Tracker.autorun调用的Meteor.subscribe块。到目前为止,一切都很好。在服务器端,有一个匹配的Meteor.publish声明了回调。

据我了解,Meteor.publish回调应为收到的每个订阅触发一次,但是不知何故此回调为单个订阅触发3〜4次。

在我的上一次测试中,Tracker.autorun块执行了4次,订阅仅执行了1次,并且回调触发了4次。

Meteor.subscribe仅运行一次,甚至跟踪器也运行几次。怎么会导致回调再次触发一次?

这有意义吗? 您知道什么可以解释这种行为吗?

如果您需要其他任何信息,请告诉我。 预先感谢

Meteor.publish('current-user', function currentUser(credentials) {
  return Users.find();
});
Tracker.autorun((c) => {
  if (!currentUserHandler) {
    currentUserHandler = Meteor.subscribe('current-user', this.credentials);
  }
});

1 个答案:

答案 0 :(得分:0)

您应该期望自动运行将在正常情况下触发两次,一次不包含数据,第二次包含一些数据。

那是为了让您在数据到达之前显示“正在加载”状态。

您正在订阅users集合special。流星使用它进行身份验证,并记录会话活动。您正在执行Users.find(),这是对整个用户集合的未经过滤的查询,因此对任何用户的任何修改都将导致它触发。出于安全原因,您也将无法看到所有用户记录。

您可能会在用户记录上存储其他数据,因此需要您订阅它。我建议您考虑将这些数据存储在另一个集合中,例如“成员”,“访客”,“个人资料”或适合您的任何名称。这样事情可能会更好地工作。