node.js - 关于co用法的困惑

浏览:33日期:2022-09-30

问题描述

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

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

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

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

问题解答

回答1:

你的用法不符合规范,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]'

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

回答2:

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

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

相关文章: