定期运行Meteor方法的最佳方式,但不要太频繁
Best way to run a Meteor method regularly, but not too often?
从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 );
另一种可能性是将它嵌入到特定的操作中,这样它只在特定的活动中运行,但这感觉很粗糙。
任何想法?有没有更好的方法来做到这一点?
谢谢!
我将尝试一个自定义发布函数,在其中我将以设置的间隔运行this.changed
。请参阅publish (http://docs.meteor.com/api/pubsub.html)文档中的按房间计数示例。您可以使用其中一个cron包来调度时间间隔。
客户端不需要知道这个hack,可以像订阅其他自定义发布一样订阅。
相关文章:
- 如何加载/构建 Chrome 应用/扩展程序并以编程方式运行
- AJAX 以多线程方式运行
- 是什么导致这个JavaScript代码以它的方式运行
- 如何在Javascript中以过程化的方式运行一个又一个语句
- 以类似命令的方式运行 NodeApp
- 为什么我的保证金上限没有按应有的方式运行
- 以不同的方式运行JavaScript函数
- 以编程方式运行摩卡时的访问结果
- 优雅的方式运行大量异步“;事物;当总数为'直到第一个“;事物;退货
- Ember.js视图助手绑定没有按预期的方式运行
- {javascript} JS代码以意外的方式运行
- 简单的javascript for循环没有按照我认为的方式运行
- 有没有一种方法可以通过Firebug中的快捷方式运行JavaScript代码?
- 动画没有按照设定的方式运行
- 如何以编程方式运行node . js应用程序
- 为什么substring方法会以这种方式运行?
- Mocha:在以编程方式运行Mocha时获取stacktrace
- 是否可以将标志传递给 Gulp 以使其以不同的方式运行任务
- 画布绘制函数以异步方式运行
- OnSubmit 是按提交表单的每种方式运行,还是仅在单击“提交”按钮时运行