Node.js最大调用栈超过错误

node.js max call stack exceeded error

本文关键字:过错 错误 调用 js Node      更新时间:2023-09-26

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

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:最大调用堆栈大小超过"错误(以及超时似乎不工作)。似乎有一些基本的错误。谁能看出来?

您在Ticker.tick()内无条件调用Ticker.tick()。我想你的意思是:

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

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

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

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