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

関数をsetTimeoutに渡し、関数の引数を3番目、4番目などとして渡す必要があります。の引数は次のsetTimeoutようになります。

Ticker.tick = function(c) {
  Ticker.fnc(c);
  timers.setTimeout(Ticker.tick, 100, c+1);
}
于 2013-03-05T20:19:20.693 に答える
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 に答える