当我在服务器上进行过滤时,为什么我的Meteor.js发布没有返回任何结果?

时间:2016-08-14 17:08:18

标签: javascript meteor publish-subscribe

我有一个meteor.js应用程序,我试图进行生产。我有一个UserEarnings集合,用于存储"积分"每个用户都赚了。现在,我发布了服务器上的所有记录:

Meteor.publish('userEarnings', () => UserEarnings.find());

将记录过滤到客户端上特定用户的相关记录:

const composer = (props, onData) => {
   const subscription = Meteor.subscribe('userEarnings');
   if (subscription.ready()) {
      const userEarnings = UserEarnings.find({owner: Meteor.user()._id}).fetch();
      onData(null, { userEarnings });
   }
};

export default composeWithTracker(composer, Loading)(AuthenticatedNavigation);

这非常有效,但理想情况下我会在服务器上过滤:

Meteor.publish('userEarnings', () => UserEarnings.find({ owner: this.userId }));

不幸的是,当我在客户端上调用UserEarnings.find()。fetch()时,这样做不会返回任何结果。有谁知道为什么会这样?请注意,我只订阅' userEarnings'当有登录用户时从客户端。

我不确定是否还有其他相关信息,但如果您认为有,请告诉我。我正在运行Meteor 1.4

1 个答案:

答案 0 :(得分:2)

变化:

public Booking GetBooking(..., int numberOfTries) {
     while (true)
          numberOfTries--;
          if (numberOfTries == 0) {
               return null;
          }

          if (allResorcesAreAvailable) {
               return new Booking()
          }
     }
}

为:

Meteor.publish('userEarnings', () => UserEarnings.find({ owner: this.userId }));

第一种方法不起作用的原因是因为通过使用箭头函数,您将发布函数的上下文设置为回调。 Meteor.publish('userEarnings', function userEarnings() { return UserEarnings.find({ owner: this.userId }); }); 需要非箭头功能才能正确设置上下文(并允许您正确使用Meteor.publish。)