Error: Can't set timers inside simulations


#1

Why cant you set timers in simulations? Is there any way of breaking out of the simulation?

Meteor.methods
  action: ->
    if Meteor.isClient
      Meteor.setTimeout(something, 1000)

#2

I can’t try right now, but I think I successfully used setTimeout in simulations. Are you sure your stub is actually called?


#3

verbatim – added this to the leaderboard app

Meteor.methods({
  action: function () {
    if (Meteor.isClient) {
      Meteor.setTimeout(function() {
        alert('yay!')
      }, 1000)
    }
  }
});

then in the console:

Meteor.call('action')
debug.js:43 Exception while simulating the effect of invoking 'action' Error: Can't set timers inside simulations
    at withoutInvocation (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:434:13)
    at bindAndCatch (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:442:33)
    at Object._.extend.setTimeout (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:458:23)
    at Meteor.methods.action (http://localhost:3000/leaderboard.js?750ee55659313db62f34866175ef2dded25696cd:46:14)
    at http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4269:25
    at _.extend.withValue (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:955:17)
    at _.extend.apply (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4260:54)
    at _.extend.call (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4138:17)
    at <anonymous>:2:8
    at Object.InjectedScript._evaluateOn (<anonymous>:905:140) Error: Can't set timers inside simulations
    at withoutInvocation (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:434:13)
    at bindAndCatch (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:442:33)
    at Object._.extend.setTimeout (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:458:23)
    at Meteor.methods.action (http://localhost:3000/leaderboard.js?750ee55659313db62f34866175ef2dded25696cd:46:14)
    at http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4269:25
    at _.extend.withValue (http://localhost:3000/packages/meteor.js?43b7958c1598803e94014f27f5f622b0bddc0aaf:955:17)
    at _.extend.apply (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4260:54)
    at _.extend.call (http://localhost:3000/packages/ddp.js?d1840d3ba04c65ffade261f362e26699b7509706:4138:17)
    at <anonymous>:2:8
    at Object.InjectedScript._evaluateOn (<anonymous>:905:140)
undefined

#4

Doing a Google search on Error: Can’t set timers inside simulations, it seems it is a Meteor feature that you can circumvent by using setTimeout instead of Meteor.setTimeout.