0

我正在学习节点,这是一个简单的发出递归

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:超出最大调用堆栈大小”错误(而且超时似乎不起作用”)。似乎有一些基本错误。有人能发现吗?

4

2 回答 2

0

你在Ticker.tick()里面无条件地打电话Ticker.tick()。我想你的意思是:

Ticker.tick = function(c) 
{
  Ticker.fnc(c);
  timers.setTimeout(function() { Ticker.tick(c+1); }, 100);
}

第一个参数setTimeout()应该是一个函数;在您的代码中,您传递了调用函数的结果。

于 2013-03-05T20:14:57.270 回答
0

您应该将函数setTimeout传递给并将函数的参数作为 的第三个、第四个等参数传递setTimeout,如下所示:

Ticker.tick = function(c) {
  Ticker.fnc(c);
  timers.setTimeout(Ticker.tick, 100, c+1);
}
于 2013-03-05T20:19:20.693 回答