Uncaught RangeError: Maximum call stack size exceeded 处理方法

报错:堆栈溢出

常见原因:

1、函数名使用关键字

2、无限递归或死循环

3、......

一般处理方法:

1、函数命名规范

2、循环或递归:设置边界条件、及时return/break

3、有边界条件还是报错,例如:

//假定有一万个数据需要处理	
var count = 0;
var total = 10000;

//func
function addPoints(){
    console.log('当前个数:',count);
    //如果小于总数
    if(count<total){
        //处理方法
        addPointCallBack();
    }
}

//func
function addPointCallBack() {
    //后续处理逻辑
    count++;
    //继续打点
    addPoints();
}

//调用
addPoints();

以上代码看起来很正常,因为设置了边界10000个数据,所以不存在“无限”的情况。实际结果如下:

如何处理?思路:每处理2000个数据,停顿2秒,然后再继续执行

	var count = 0;
	var total = 10000;
	//模拟sleep
	function sleep(millisecond) {
		return new Promise(resolve => {
			setTimeout(() => {
				resolve()
			}, millisecond)
		})
	}

	//自增方法
	async function addPoints(){
		console.log('当前个数:',count);
		if(count>0&&count%2000==0){
			console.log('超出2000点位,进入sleep')
			await sleep(2000);
			console.log('退出sleep')
		}
		//如果小于总数
		if(count<total){
			addPointCallBack();
		}
	}
	//方法回调
	function addPointCallBack() {
		count++;
		addPoints();
	}

	addPoints();

效果如下:

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值