Maximum call stack size exceeded 问题出现原因是什么?
发布于 10 年前 作者 buctyoyo 57239 次预览 最后一次回复是 10 年前 来自 问答
在开发过程中遇到一个问题 使用了 sequelize.js 开发一个A方法传的参数格式如下 原先代码 (传transaction 会造成 Maximum call stack size exceeded 错误)
/**
*@param options {Object}
* example: {
* device_id: '',
* login_id: '',
* login_type: '',
* game_id: '',
* player_id: ''}
* transaction: [Sequelize.transaction]
* @return {bluebird| Promise}
*/
function A(options){
}
改进后代码 不会报错,正常运行
/**
*@param options {Object}
* example: {
* device_id: '',
* login_id: '',
* login_type: '',
* game_id: '',
* player_id: '',}
* @param transaction {sequelize.Transaction}
* @return {bluebird| Promise}
*/
function A(options, transaction){
}
问题出现的云里雾里,同时解决的也云里雾里,请问各位大神,上面的改动为什么会有效,要是能讲一下原理,不胜感激
4 回复
没人回复,自己顶
首先这个问题表面上是调用栈超过阈值, 一般循环调用函数的时候会出现
找到问题了,,因为日志用winston 对于object 会递归打印字段,,,嵌套层数太多了,或者死循环什么的,,,,,
自引用或者循环引用了,绝对的,层数再多也不可能超过 call stack 的限制