关于co用法的困惑

发布于 2022-09-04 04:50:36 字数 386 浏览 33 评论 0

node小白,今天学习了下用Node写命令行工具。

然后有个TJ大神写的co包:

    co(function* (){
        yield setTimeout(function() {
            console.log(1);
        }, 5);
        
        yield setTimeout(function() {
            console.log(2);
        }, 1);
    });

最后这段代码执行的时候只输出了1。为什么没有输出2呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

ゝ杯具 2022-09-11 04:50:36

你的用法不符合规范,co允许yield一个promise、generatior、array、object,但不允许yield一个普通函数,必须是一个范式函数;
yield第一个setTimeout时,该函数正常执行,但是执行之后报错:

TypeError: You may only yield a function, promise, generator, array, or object, but the following object was passed: "[object Object]"

报错自然会中断,所以代码不会往下执行,至于为什么知道报上面这个错误,等你细读源码就会一清二楚

不乱于心 2022-09-11 04:50:36

tj/co 不完善,你可以使用 hprose 里面的 co 代替 tj/co,这里有一篇介绍的文章:

https://segmentfault.com/a/11...

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文