具有可变间隔的setInterval

时间:2014-03-03 03:33:09

标签: coffeescript meteor settimeout setinterval

我想要立即进行api调用,然后在1秒后完成,然后是2秒等,增量为1秒到10秒。

我试过这样的事情:

Meteor.startup ->
  counter = 1000
  Meteor.setInterval (->
    Meteor.call "call_url", url, (err, result) ->
        ...

    if counter < 10000
      counter += 1000
      console.log counter
  ), counter

当我的计数器递增时,日志完成每一秒,这意味着 setInterval 不会跟踪该值。

我看到处理这个问题的唯一方法就是让9 setTimeout 在不同时间调用api,然后在所有超时后启动 Meteor.setInterval 。听起来很难看。

有关如何以干净的方式执行此操作的任何建议?当用户只是连接到页面时,看到频繁更新是很重要的,但是如果他决定让它打开一段时间,则不需要经常执行该api查询。

2 个答案:

答案 0 :(得分:2)

更通用的解决方案(以及CoinsManager未来的可扩展性)是使用支持将来调度事件的排队包。我查看过一堆background task management for Meteorqueue支持日程安排。

答案 1 :(得分:0)

不太清楚你在问什么,并且可能有很多方法来生成你想要的间隔。

在javascript中它可能看起来像这样:

var doStuff = function(){...};
var intervals = [ 1000, 3000, 6000, 10000, 15000, 21000, 28000, 36000, 45000, 55000 ];

doStuff();  //run immediately
intervals.forEach( function( interval ){
  Meteor.setTimeout( doStuff, interval );
});