我正在尝试使用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
)。
发生了什么,我该如何解决?
答案 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
。有两种方法:
原生:
call
使用_.partial
:
Meteor.setInterval(Meteor.call.bind(null, 'init'), period);