为什么使用 Meteor.setInterval 调用方法会抛出 TypeError 异常?
Why does calling a method using Meteor.setInterval throw a TypeError exception?
我正在尝试使用 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);
我在控制台中看到 "test" 1 次,然后出现以下错误:
Exception in setInterval callback: TypeError : undefined is not a function.
我一直在看这个问题:Exception in setInterval callback 但我用不同的方式来做(使用 Method.methods
)。
这是怎么回事,我该如何解决?
看看这一行:
Meteor.setInterval(Meteor.call('init'),period);
现在试着想想引擎是做什么的。首先,Meteor.setInterval
。这个功能他需要的是:
- 回调
- 毫秒数
你传递了什么?毫秒数,对于回调,您传递 Meteor.call('init')
。引擎看到您的 call
并执行它,因为这就是您要求他用括号做的事情。而你的电话 returns 什么都没有。然后 setInterval
尝试不执行任何操作。
那么,如何将带参数的函数传递给 Meteor.setInterval
?一种方法是将其包裹在闭包中:
Meteor.setInterval(function() {
Meteor.call('init');
}, period });
这样,你的call
不会立即执行,只有当setInterval
使用回调时才会执行,然后执行你的call
.
您也可以部分应用 call
。有两种方式:
母语:
Meteor.setInterval(Meteor.call.bind(null, 'init'), period);
-
Meteor.setInterval(_.partial(Meteor.call, 'init'), period);
我正在尝试使用 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);
我在控制台中看到 "test" 1 次,然后出现以下错误:
Exception in setInterval callback: TypeError : undefined is not a function.
我一直在看这个问题:Exception in setInterval callback 但我用不同的方式来做(使用 Method.methods
)。
这是怎么回事,我该如何解决?
看看这一行:
Meteor.setInterval(Meteor.call('init'),period);
现在试着想想引擎是做什么的。首先,Meteor.setInterval
。这个功能他需要的是:
- 回调
- 毫秒数
你传递了什么?毫秒数,对于回调,您传递 Meteor.call('init')
。引擎看到您的 call
并执行它,因为这就是您要求他用括号做的事情。而你的电话 returns 什么都没有。然后 setInterval
尝试不执行任何操作。
那么,如何将带参数的函数传递给 Meteor.setInterval
?一种方法是将其包裹在闭包中:
Meteor.setInterval(function() {
Meteor.call('init');
}, period });
这样,你的call
不会立即执行,只有当setInterval
使用回调时才会执行,然后执行你的call
.
您也可以部分应用 call
。有两种方式:
母语:
Meteor.setInterval(Meteor.call.bind(null, 'init'), period);
-
Meteor.setInterval(_.partial(Meteor.call, 'init'), period);