var events = require('events'),timers = require('timers');
var EventEmitter = require('events').EventEmitter,
util = require('util');
//class initi
var myt = function()
{
}
util.inherits(myt, EventEmitter);
myt.prototype.fnc = function(c)
{
console.log(c + ":send custom");this.emit('tick recv',c);
}
var Ticker = new myt();
Ticker.on('tick recv',function(c)
{
console.log(c + ':got custom');
})
Ticker.tick = function(c)
{
Ticker.fnc(c);
timers.setTimeout(Ticker.tick(c+1), 100);
}
Ticker.tick(0);
我得到“RangeError:超出最大调用堆栈大小”错误(并且超时似乎也没有工作“)。似乎有一些基本错误。有人能发现吗?
答案 0 :(得分:0)
您在Ticker.tick()
内无条件呼叫Ticker.tick()
。我想你的意思是:
Ticker.tick = function(c)
{
Ticker.fnc(c);
timers.setTimeout(function() { Ticker.tick(c+1); }, 100);
}
setTimeout()
的第一个参数应该是一个函数;在你的代码中,你传递了调用函数的结果。
答案 1 :(得分:0)
您应该将函数传递给setTimeout
并将函数的参数作为setTimeout
的第三,第四等参数传递,如下所示:
Ticker.tick = function(c) {
Ticker.fnc(c);
timers.setTimeout(Ticker.tick, 100, c+1);
}