戳了一段代码测试 yield 的写循环的问题
发布于 5 年前 作者 dphdjy 3644 次浏览 最后一次编辑是 4 年前 来自 问答
var co = require('co');

co(function*() {
    this.i = 0;
    yield loop1();
})

function* loop1() {
    console.log("loop:"+this.i);
    this.i++;
    yield loop2();
}

function* loop2() {
    console.log("loop:"+this.i);
    this.i++;
    yield loop1();
}

然而这段代码的循环次数永远只有

loop:0
loop:1
loop:2
loop:3
loop:4
loop:5
loop:6
loop:7
loop:8
loop:9
...
loop:3581
loop:3582
loop:3583
loop:3584
loop:3585
loop:3586
loop:3587

难道代码有问题还是本身就是这样的限制那么限制来源是co模块迭代next还是什么...以3587和yield为关键词并未找到相关问题

5 回复

这个和co没关系吧 应该是无法gc了吧 内存泄漏

@zhangking520 木有报错~内存泄露会蹦出错误~~

栈溢出了,递归层数太多了。

co catch 一下 的确是 RangeError: Maximum call stack size exceeded

@zhangking520 好吧~大概直接跳过错误捕获停止进程了~

回到顶部