簡體   English   中英

node.js最大調用堆棧超出錯誤

[英]node.js max call stack exceeded error

我正在學習節點,這是一個簡單的發射遞歸

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM