ES6 generator 与 koa 中间件 是如何 generator解决异步的
来源:互联网 发布:python截取中文字符串 编辑:程序博客网 时间:2024/06/06 03:47
标签(空格分隔): JS 同步编程异步执行 异步 同步
参考文章:
koa如何利用generator解决回调:http://blog.stevensanderson.com/2013/12/21/experiments-with-koa-and-javascript-generators/
常规的 generator 概览
// 自己编写的 demofunction print(data){ console.log('传入的参数是:',data)}function *g(fn){ for(var i=0;i<10;i++){ yield i yield fn(i) }}var gg = g(print) // 此处有 generator,暂停变成同步执行gg.next() // 此处是同步阻塞的 {value:'0',done:false}// 当 gg.next() 返回 {value:undefined,done:true} 时, generator 函数才执行完并退出,之后再次变成异步模式console.log('此处会第一步执行吗?')
上述例子并不太像一般的函数封装,看下面这个例子
function *request(url,fn){ yield fn(url) // 简略不写数据请求了;}function *g(){ var result = [] for(var i=0;i<5;i++){ var r_result = yield request(url) result.push(r_result) // 保证了传入的顺序是对的 } return result // 最后返回了一个结果}
koa 是如何 generator 的呢?
var koa = require('koa'), app = koa();app.use(function *() { // Here is the important bit of application logic for this example. // We make use of a series of async operations without callbacks. var city = yield geolocation.getCityAsync(this.req.ip); var forecast = yield weather.getForecastAsync(city); // 此处的参数需要同步传进来 this.body = 'Today, ' + city + ' will be ' + forecast.temperature + ' degrees.';});app.listen(8080); //根据上面代码,个人目前猜想实现 use 过程是:function koa(){ var use = function *(fn){ whild(fn().next().done != true){ fn().next() } } return { use, }}//猜想: koa 内部会一直调用 generator,直到 done为 true 时才会退出
低版本 koa 不支持 promise 时,可以 thunk 形式来让 koa 识别 thunk == promise 相同的功能
// Wrap the async operation in a 'thunk' so that Koa understands itfunction getSquareValueThunk(num) { // A 'thunk' returns a function that accepts a callback return function(callback) { getSquareValueAsync(num, callback); };}app.use(function *() { var square = yield getSquareValueThunk(16); this.body = "Square of 16 is " + square;});
阅读全文
0 0
- ES6 generator 与 koa 中间件 是如何 generator解决异步的
- ES6-深入理解Generator yield & Koa中间件执行顺序
- es6 Generator与异步的同步书写
- koa中间件原理 && yield && generator
- ES6-Generator与异步操作
- Node.js es6 generator 和 thunk 函数解决异步金字塔
- es6的Generator函数
- es6的generator
- ES6 —(Generator 函数的异步应用)
- Javascript的异步编程(下)及es6之generator
- ES6--Generator
- ES6-generator
- 【es6】Generator
- ES6 Generator
- ES6 Generator
- 用 ES6 generator & Promise 写异步代码
- 小试ES6:异步编程之Generator
- ES6 -- 异步编程神器2:Generator
- 北大方正声誉不佳,人寿保险业务巨亏
- visual studio 2015下载地址
- 双向链表
- springMVC拦截器执行过程和使用
- bayes
- ES6 generator 与 koa 中间件 是如何 generator解决异步的
- 每日MySQL之017:MySQL中的prepared statements
- ThreadPoolExecutor使用小结
- geronimo
- 串口透传(转自天运科技)
- 多线程之原子锁
- 《图解HTTP》整理(2)
- HDU 3345 War Chess
- 变量