定期运行Meteor方法的最佳方法,但不是经常?

时间:2016-09-04 22:26:57

标签: javascript meteor

使用Meteor方法获得合理新数据的最佳,最有效的方法是什么,而不是经常运行?

我有一个服务器端Meteor方法,必须检查3-4个集合才能返回正确的值集。

我们在整个应用程序的几个地方使用此方法,但经常运行似乎非常昂贵。

以下是方法:

getContactLimit() {
  let currentOrg   = Meteor.user() && Meteor.user().profile && Meteor.user().profile.currentOrg,
      orgData      = Orgs.findOne( { 'domain': currentOrg } ),
      orgStatus    = orgData && orgData.status,
      orgPlan      = orgData && orgData.billing && orgData.billing.plan,
      allPlans     = Meteor.settings.public.plans,
      thisPlan     = _.find( allPlans, function(plan){ return plan.name == orgPlan; } ),
      planContacts = thisPlan && thisPlan.contacts,
      contactCount = Contacts.find({ 'orgId': currentOrg }).count(),
      countObj     = {
        planCount: planContacts,
        orgCount: contactCount
      };
  return countObj;
}

目前我们只是按需调用它,这不是问题。但我们即将添加它以在整个应用程序中显示通知。

我看过的一种方法是调用包含在Meteor.setInterval();函数中的方法并让它更新会话变量。

以下是我打算如何调用它:

Meteor.setInterval(function() {
  Meteor.call( 'getContactLimit', function( error, response ) {
    Session.set('contactLimit', response );
  });    
}, 60000 );

另一种可能性是将其嵌入到某些操作中,因此它只能在特定的活动上运行,但这会让人感到烦恼。

有什么想法吗?有没有更好的方法来实现这一目标?

谢谢!

1 个答案:

答案 0 :(得分:0)

我会尝试一个自定义发布函数,在其中我将以设定的间隔运行this.changed。请参阅发布文档(http://docs.meteor.com/api/pubsub.html)中的按房间计算示例。您可以使用其中一个cron包来安排时间间隔。

然后客户端不需要知道这个hack,并且可以像任何其他人一样订阅自定义出版物。