koa中生成器函数generator执行顺序详解

ES6的generator http://book.apebook.org/minghe/koa-action/co/start.html

 	
function* gen() {
  var a = yield 'start';
  console.log(a);
  var b = yield 'end';
  console.log(b);
  return 'over';
}
var it = gen();
console.log(it.next()); // {value: 'start', done: false}
console.log(it.next(22)); // 22 {value: 'end', done: false}
console.log(it.next(333)); // 333 {value: 'over', done: true}

带有 * 的函数声明表示是一个 generator 函数,当执行 gen() 时,函数体内的代码并没有执行,而是返回了一个 generator 对象。

generator 函数通常和 yield 结合使用,函数执行到每个 yield 时都会暂停并返回 yield 的右值。下次调用 next 时,函数会从 yield 的下一个语句继续执行。等到整个函数执行完,next 方法返回的 done 字段会变成 true,并且将函数返回值作为 value 字段。

第一次执行 next() 时,走到 yield 'start' 后暂停并返回 yield 的右值 'start'。注意,此时var a = 这个赋值语句其实还没有执行。

第二次执行 next(22) 时,从 yield 'start' 下一个语句执行。于是执行 var a = 这个赋值语句,而表达式 yield 'start' 的值就等于传递给 next 函数的参数值 22,所以,a 被赋值为 22。然后继续往下执行到 yield 'end' 后暂停并返回 yield 的右值 'end'

第三次执行 next(333) 时,从 yield 'end' 下一个语句执行。此时执行 var b = 这个赋值语句,表达式 yield 'end' 的值等于传递给 next 函数的参数 333b 被赋值为 333。继续往下执行到 return 语句,将 return 语句的返回值作为 value 返回,因为函数已经执行完毕,done 字段标记为 true

可以看到 generator 就是一种迭代机制,就像一只很懒的青蛙,戳一下(调用 next)动一下。
出处:http://taobaofed.org/blog/2016/03/18/error-handling-in-koa/

2039474406-56efe8fb3a850_articlex

nodejs学习资料

修改npm包管理器的registry(registry.npmjs.org)为淘宝镜像(npm.taobao.org),参考nam config -h 相关命令

npm config set registry “https://registry.npm.taobao.org“

http://npm.taobao.org

七天学会NodeJS http://nqdeng.github.io/7-days-nodejs/

Node.js Style Guide  https://github.com/dead-horse/node-style-guide

深入Node.js的模块机制  http://www.infoq.com/cn/articles/nodejs-module-mechanism/

学习ES6生成器(Generator) http://www.toobug.net/article/learning_es6_generator.html

require() 源码解读 http://www.ruanyifeng.com/blog/2015/05/require.html

npm 模块安装机制简介 http://www.ruanyifeng.com/blog/2016/01/npm-install.html

NodeJs 测试框mocha https://cnodejs.org/topic/516526766d38277306c7d277

exports 和 module.exports 的区别

http://cnodejs.org/topic/5231a630101e574521e45ef8

http://cnodejs.org/topic/52308842101e574521c16e06

NodeJS 开发者的 10 个常见错误 http://web.jobbole.com/82504/

koa资料

《koa实战》 http://book.apebook.org/minghe/koa-action/index.html

yield 和 yield*   http://taobaofed.org/blog/2015/11/19/yield-and-delegating-yield/

【koa经典入门教程】https://github.com/koajs/kick-off-koa

https://github.com/koajs/koa/wiki

koa源码分析系列 http://purplebamboo.github.io/2014/05/24/koa-source-analytics-1/

http://cnodejs.org/topic/56936889c2289f51658f0926
如何优雅的在 koa 中处理错误 http://taobaofed.org/blog/2016/03/18/error-handling-in-koa/

 

项目结构图
https://github.com/focusaurus/express_code_structure

http://blog.csdn.net/tinico/article/details/18033433

https://cnodejs.org/topic/538edddda087f456207d1a81

 

10个最好的 Node.js MVC 框架

http://www.cnblogs.com/lhb25/p/10-best-node-js-mvc-frameworks.html