CNode

Maximum call stack size exceeded 问题出现原因是什么?

问答
Bbuctyoyo发布于11 年前最后回复11 年前4 回复57546 浏览0 收藏

在开发过程中遇到一个问题 使用了 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)

B
buctyoyo#1·11 年前

没人回复,自己顶

W
wssgcg1213#2·11 年前

首先这个问题表面上是调用栈超过阈值, 一般循环调用函数的时候会出现

B
buctyoyo#3·11 年前

找到问题了,,因为日志用winston 对于object 会递归打印字段,,,嵌套层数太多了,或者死循环什么的,,,,,

K
klesh#4·11 年前

自引用或者循环引用了,绝对的,层数再多也不可能超过 call stack 的限制

参与回复
登录后即可参与回复。登录