koa的中间件,是可以自己运行嵌套的generator的么?
发布于 10 年前 作者 hwoarangzk 4407 次浏览 最后一次编辑是 8 年前 来自 问答

举个栗子:

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的迭代,欢迎拍砖,哈哈

多谢啊~去拜读下你的文章~

回到顶部