Maximum call stack size exceeded 问题出现原因是什么?
发布于 8 年前 作者 buctyoyo 55641 次浏览 来自 问答

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

回到顶部