举个栗子:
function* gen1() {
yield gen2();
}
function* gen2() {
yield co-fs.readFile('XXX');
}
app.use(gen1)
代码不完整,就是类似的意思。可以运行这样的嵌套generator么?怎么实现的呢?是自己封装了co么?
6 回复
function* gen1() {
yield *gen2();
}
function* gen2() {
yield co-fs.readFile('XXX');
}
app.use(gen1)
第一个方法需要加一个 星号 ,以便转移迭代对象 koa可以在内部 yield next,是因为它在co中做了判断,会做相应处理
突然发现你头像是影舞啊,有机会一起JJC啊,哈哈
@whosesmile 以前玩DZ的,跟路人法爷22十连胜,afk快一年了 话说 非koa框架的话,我执行嵌套的generator,我知道yield后面要加一个* 在koa里yield不加这个*可以么?
可以的,co接受一个genratorfunction,返回一个promise。 如果这个generatorfunction的实例每次迭代的返回结果不是promise,它会包装处理成promise,当然前提是co内部支持的几种返回值类型;如果返回值也是一个generator或者generatorfunction,co会做递归调用
推荐你看下co的源码,很简单的,几十行代码就,我在 segmentfault 上写了个文章,分析koa的迭代,欢迎拍砖,哈哈