咱們之前講了generator怎麼用,也講了各種例子,比如上次的runner,咱們再來說說另外一個例子,讓大家更明確的看一看generator能用在哪。

實際上generator在一個地方用的還蠻多,它在另外一個框架里也有用到,就是KOA,不知道大家有沒有見過,而KOA這個東西是nodejs的一個框架,這會可能有人說了,我不會用nodejs,沒聽過,沒學過。emmm,沒關係,咱並不需要對node有多了解,本章主要還是講generator,會不會node是另外一回事。

現在假定大家會node,當然,這塊實在看不懂也問題不大,咱就看看generator怎麼用,咱不看node

首先新建個目錄,終端進入這個目錄,輸入

npm i koa

把koa下載下來

然後新建server.js文件

const koa = require(koa);

let server = new koa();

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

server.listen(8080);

然後終端輸入

node server.js

這個時候,咱們看看效果,在瀏覽器輸入localhost:8080 回車

我們可以看到頁面內輸出了123

當然,到這裡咱們還沒有看到generator的優勢,沒關係,咱們繼續往下看

實際上來說,generator更適用於做非同步操作,那咱們得引入點非同步的玩意

對於後台來說,其實經常用到的一個非同步操作,就是讀取資料庫,從資料庫里讀取數據

那麼這麼時候,咱們新建一個資料庫表,隨便寫點內容

然後在終端輸入

npm i koa-mysql

修改server.js文件

const koa = require(koa);
const mysql = require(koa-mysql);

let db = mysql.createPool({host: localhost, user: root, password: root, database: 20190617});

let server = new koa();

server.use(function *(){
let data = yield db.query(`SELECT * FROM user_table`);

this.body = data;
});

server.listen(8080);

然後咱們重新啟動終端

node server.js

刷新瀏覽器咱們可以看到,資料庫里的數據已經被讀取出來了

在代碼里,我們並沒有看到任何非同步的痕迹,在正常情況下,db.query是個典型的非同步操作,但是現在被咱們同步化了,很方便

其實呢,用這幾個例子就是為了告訴大家,這個generator並不是我覺得它好,並不是我拿它消除非同步操作,而是很多人都這麼干。

到這裡,咱們的generator就告一段落,有興趣的童鞋,可以繼續研究~


推薦閱讀:
相关文章