为什么使用Meteor.setInterval调用方法会抛出TypeError异常?

时间:2015-04-15 12:58:12

标签: javascript meteor setinterval

我正在尝试使用Meteor.setInterval功能但我在使用它时遇到了一些麻烦。

这是我的代码:

Meteor.methods({
  init : function(){
    console.log('test');
  },
  start : function(period){
    console.log('start : period '+period);

    Meteor.setInterval(Meteor.call('init'),period);
  }
});

Meteor.call('start', 100);

我看到"测试"在我的控制台1次,然后我收到以下错误:

  

setInterval回调中的异常:TypeError:undefined不是函数。

我一直在看这个问题:Exception in setInterval callback但我是以不同的方式做到的(使用Method.methods)。

发生了什么,我该如何解决?

1 个答案:

答案 0 :(得分:3)

看看这一行:

Meteor.setInterval(Meteor.call('init'),period);

现在尝试考虑引擎的功能。首先,Meteor.setInterval。他对此功能的需求是:

  • 回叫
  • 毫秒数

你通过什么?毫秒数,以及您传递的回调Meteor.call('init')。引擎会看到你的call并执行它,因为这是你要求他用括号做的。你的电话什么也没回来。然后setInterval尝试不执行任何操作。

那么,如何将带参数的函数传递给Meteor.setInterval?一种方法是将其包装在闭包内:

Meteor.setInterval(function() {
  Meteor.call('init'); 
}, period });

这样,您的call 立即执行,只有在setInterval使用回调后才会执行,然后执行您的{{1} }。

您也可以部分应用call。有两种方法:

  1. 原生:

    call
  2. 使用_.partial

    Meteor.setInterval(Meteor.call.bind(null, 'init'), period);