最近2018中文字幕在日韩欧美国产成人片_国产日韩精品一区二区在线_在线观看成年美女黄网色视频_国产精品一区三区五区_国产精彩刺激乱对白_看黄色黄大色黄片免费_人人超碰自拍cao_国产高清av在线_亚洲精品电影av_日韩美女尤物视频网站

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
node.js學(xué)習(xí)筆記之generator-創(chuàng)新互聯(lián)

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

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

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

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

看代碼:

'use strict';

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

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

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

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

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

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

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

然后等這句執(zhí)行完會(huì)把結(jié)果返回給指針,可以用 next().value取出這個(gè)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'

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

yield* aa();

那有些童鞋就會(huì)問了,為什么不直接寫 aa();?那是因?yàn)樯衔恼f了,aa()這樣直接調(diào)用generator函數(shù),函數(shù)體是不會(huì)執(zhí)行的,只會(huì)返回一個(gè)遍歷器,函數(shù)體都還沒執(zhí)行,當(dāng)然沒有結(jié)果。

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

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

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


網(wǎng)頁名稱:node.js學(xué)習(xí)筆記之generator-創(chuàng)新互聯(lián)
文章地址:http://fisionsoft.com.cn/article/jcpjs.html