0
点赞
收藏
分享

微信扫一扫

【JavaScript的ES6语法】11、generator实例-KOA


上一篇我们学习了generator中的runner实例,使用generator配合Promise实现了异步操作改造成同步操作的方法。本篇我们来继续学习generator的另一个实例-----Koa。

一、Koa简介

Koa是一个新的web框架,由Express幕后的原班人马打造。该框架通过利用async函数,帮开发者丢弃回调函数,并有力地增强错误处理。 

这里提到的“丢弃回调函数”,就很类似上一章我们实现的runner的效果,这里面也是用到了generator。

Koa框架是基于NodeJS的,不了解Node的童鞋也不要着急,我们仅说和generator有关的部分。
注:安装Node:​​​https://www.runoob.com/nodejs/nodejs-install-setup.html​​

二、Koa中的generator

使用Koa很简单,我们现在文件夹下创建一个service.js文件,然后运行Node服务,打开控制台(cmd也可以),首先使用npm init指令生成package.json文件,这个是一个Node模块必须的模块的描述文件:

【JavaScript的ES6语法】11、generator实例-KOA_yield

【JavaScript的ES6语法】11、generator实例-KOA_koa-mysql_02


然后使用npm指令安装Koa框架:

【JavaScript的ES6语法】11、generator实例-KOA_yield_03


然后在service.js中写下如下代码:

const koa=require('koa');//引用koa库
let server=new koa();//声明一个koa对象
server.listen(8080);//启用8080端口监听koa服务

好了,一个koa就跑起来了。

在koa对象中,有一个use方法,我们使用该方法,并给其body对象一个字符串:

server.use(function *(){
this.body='123';
});

然后运行service.js服务:

【JavaScript的ES6语法】11、generator实例-KOA_yield_04


然后即可看到这个字符串在页面上:

【JavaScript的ES6语法】11、generator实例-KOA_generator_05


这里的use实际上就是传入了一个generator函数,可以在该函数中使用yield来进行异步的暂停操作。那么下面来使用异步操作测试一下。我们这次从数据库里读取数据,koa提供了连接mysql数据库的框架koa-mysql,我们安装一下:

【JavaScript的ES6语法】11、generator实例-KOA_koa_06


然后打开本地数据库,创建一个表,添加一些数据:

【JavaScript的ES6语法】11、generator实例-KOA_generator_07

【JavaScript的ES6语法】11、generator实例-KOA_generator_08


然后引入mysql连接库,获取数据库连接对象,并查询相关表。完整代码如下:

const koa=require('koa');//引用koa库
const mysql=require('koa-mysql');//引用koa-mysql库

let server=new koa();//声明一个koa对象
//声明数据库连接对象
let db=mysql.createPool({host:'localhost',user:'root',password:'1234',database:'test'});
server.listen(8080);//启用8080端口监听koa服务

server.use(function *(){
let data = yield db.query('select * from user_table');
this.body=data;
});

重新运行service.js,效果如下:

【JavaScript的ES6语法】11、generator实例-KOA_koa-mysql_09


可以看到,数据库中的数据全部被取出,以json的方式展示在页面上。

上面的查询数据库的语句“db.query('select * from user_table')”实际上是一个很典型的异步操作,而我们通过使用generator函数的yield关键字,在获取数据库数据之前,不打印数据,获取结束后,释放主进程,然后赋值给body显示到页面上,消除了数据库的异步操作,使其变为一个同步操作。

至此,generator函数的所有内容就结束了。下一篇我们来对整个ES6的知识点进行回顾复习和汇总梳理。

参考:深入解读ES6系列视频教程(kaikeba.com提供,主讲老师石川(Blue))

举报

相关推荐

0 条评论