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

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

node.js學(xué)習(xí)筆記之generator-創(chuàng)新互聯(lián)

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

在張家口等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供做網(wǎng)站、成都做網(wǎng)站 網(wǎng)站設(shè)計制作按需定制制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),營銷型網(wǎng)站建設(shè),成都外貿(mào)網(wǎng)站建設(shè),張家口網(wǎng)站建設(shè)費用合理。

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

我的個人理解,異步操作就是程序執(zhí)行到generator的yield標(biāo)記的語句時,暫時暫停當(dāng)前程序的執(zhí)行,然后把被標(biāo)記的代碼執(zhí)行完,到返回結(jié)果的時候當(dāng)前程序再繼續(xù)執(zhí)行,這樣就可以在被標(biāo)記語句的下一行代碼里使用被標(biāo)記語句得到的結(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ù)名,當(dāng)然兩邊都有空格也是可以的,然后在函數(shù)體里,有需要做異步操作的語句前加上yield,以前看別人的貼子的時候,要么只有代碼,要么就一兩句解釋,我這人悟性不夠,往往看不懂,這里講的雖然啰嗦,但更容易懂是吧,下面來一行一行的解釋一下這段代碼是什么意思:

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

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

然后聲明一個變量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標(biāo)記的代碼執(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í)行,當(dāng)然沒有結(jié)果。

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

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

另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國服務(wù)器、虛擬主機、免備案服務(wù)器”等云主機租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務(wù)可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場景需求。


文章標(biāo)題:node.js學(xué)習(xí)筆記之generator-創(chuàng)新互聯(lián)
文章路徑:http://weahome.cn/article/jcpjs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部