真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

node.js學(xué)習(xí)筆記之generator

呃,今天學(xué)了generator,拿出來做個標記。

為任丘等地區(qū)用戶提供了全套網(wǎng)頁設(shè)計制作服務(wù),及任丘網(wǎng)站建設(shè)行業(yè)解決方案。主營業(yè)務(wù)為成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、任丘網(wǎng)站設(shè)計,以傳統(tǒng)方式定制建設(shè)網(wǎng)站,并提供域名空間備案等一條龍服務(wù),秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務(wù)。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

這個詞在node.js里的做用是為了做異步操作,generator實際上就是promise的語法糖,什么叫語法糖呢,就是....自己度娘吧。。

我的個人理解,異步操作就是程序執(zhí)行到generator的yield標記的語句時,暫時暫停當前程序的執(zhí)行,然后把被標記的代碼執(zhí)行完,到返回結(jié)果的時候當前程序再繼續(xù)執(zhí)行,這樣就可以在被標記語句的下一行代碼里使用被標記語句得到的結(jié)果。主要用于不確定執(zhí)行時長的語句,比如:讀取數(shù)據(jù)庫,讀取文件等。

看代碼:

'use strict';

function * aa(){
	yield 'aa';
}

let a = aa();
console.log(a.next().value);//aa

generator函數(shù)的寫法就是在function 和函數(shù)名之前要有一個星號(*),星號左右最少有一個空格,可以是貼著function關(guān)鍵字,也可以是貼著函數(shù)名,當然兩邊都有空格也是可以的,然后在函數(shù)體里,有需要做異步操作的語句前加上yield,以前看別人的貼子的時候,要么只有代碼,要么就一兩句解釋,我這人悟性不夠,往往看不懂,這里講的雖然啰嗦,但更容易懂是吧,下面來一行一行的解釋一下這段代碼是什么意思:

首先,定義了一個generator函數(shù)aa,

函數(shù)體里有需要做異步操作的語句'aa',用yield標記,

然后聲明一個變量a指向aa()返回的遍歷器,對,你沒看錯,在 let a=aa();這句的時候aa()方法還沒有執(zhí)行,a在這時候只是得到aa()的一個遍歷器,

然后下一句輸出a.next().value,這句的意思是什么?在這之前需要先說明一點。generator函數(shù)的執(zhí)行方式是先生成一個遍歷器,然后有一個指針指向最開始執(zhí)行處,然后函數(shù)體中的每一個yield就是一個節(jié)點,想往下執(zhí)行,就只能用遍歷器的next()方法去指向下一個yield直到結(jié)束,這一句的意思就是執(zhí)行yield 'aa';這句代碼,本文寫的例子很簡單,yield 'aa'你可以寫成  yield 讀取文件;

然后等這句執(zhí)行完會把結(jié)果返回給指針,可以用 next().value取出這個yield標記的代碼執(zhí)行的結(jié)果。

generator函數(shù)可以嵌套:

'use strict';

function * aa(){
	yield 'aa';
}

let test = function* (){
	yield 'hello';
	yield* aa();
	yield 'ok';
}

let test1 = test();
console.log(test1.next().value);//'hello'
console.log(test1.next().value);//'aa'
console.log(test1.next().value);//'ok'

這段代碼和上面代碼唯一的不同是中間嵌套了一個generator函數(shù)

yield* aa();

那有些童鞋就會問了,為什么不直接寫 aa();?那是因為上文說了,aa()這樣直接調(diào)用generator函數(shù),函數(shù)體是不會執(zhí)行的,只會返回一個遍歷器,函數(shù)體都還沒執(zhí)行,當然沒有結(jié)果。

那又有些童鞋會問,其他的yield 后不是都沒有星號么?為什么這個有星號?這個問題問的好,不加星號的話,直接yield aa(),實際上是和直接調(diào)用aa()是一樣的,為什么,yield只是一個標記,去執(zhí)行被標記的代碼,那和直接調(diào)用aa()有什么區(qū)別呢?但加了星號就不一樣了,他會等aa()函數(shù)體返回。

恩。那后面的三行輸出語句我想就應(yīng)該不用再多說了,,


新聞名稱:node.js學(xué)習(xí)筆記之generator
新聞來源:http://weahome.cn/article/gdedeo.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部