CNode

戳了一段代码测试 yield 的写循环的问题

问答
Ddphdjy发布于11 年前最后回复11 年前5 回复5658 浏览0 收藏
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)

Z
zhangking520#1·11 年前

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

D
dphdjy#2·11 年前
引用 zhangking520这个和co没关系吧 应该是无法gc了吧 内存泄漏

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

C
coordcn#3·11 年前

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

Z
zhangking520#4·11 年前

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

D
dphdjy#5·11 年前
引用 zhangking520co catch 一下 的确是 RangeError: Maximum call stack size exceeded

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

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