91aaa在线国内观看,亚洲AV午夜福利精品一区二区,久久偷拍人视频,久久播这里有免费视播

<strong id="fvuar"></strong>

  • <sub id="fvuar"><dl id="fvuar"><em id="fvuar"></em></dl></sub>

    1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機(jī)構(gòu)

      手機(jī)站
      千鋒教育

      千鋒學(xué)習(xí)站 | 隨時隨地免費(fèi)學(xué)

      千鋒教育

      掃一掃進(jìn)入千鋒手機(jī)站

      領(lǐng)取全套視頻
      千鋒教育

      關(guān)注千鋒學(xué)習(xí)站小程序
      隨時隨地免費(fèi)學(xué)習(xí)課程

      當(dāng)前位置:首頁  >  技術(shù)干貨  > 深入淺出ES6——async函數(shù)

      深入淺出ES6——async函數(shù)

      來源:千鋒教育
      發(fā)布人:wjy
      時間: 2023-01-06 11:34:00 1672976040

        ES2017 標(biāo)準(zhǔn)引入了 async 函數(shù),使得異步操作變得更加方便。

        async 函數(shù)是什么?一句話,它就是 Generator 函數(shù)的語法糖。研究 async 的原理,就必須先弄清楚 Generator 是個啥。

        Generator 函數(shù)是 ES6 提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同。

        形式上,Generator 函數(shù)是一個普通函數(shù),但是有兩個特征。一是,function關(guān)鍵字與函數(shù)名之間有一個星號;二是,函數(shù)體內(nèi)部使用yield表達(dá)式,定義不同的內(nèi)部狀態(tài)(yield在英語里的意思就是“產(chǎn)出”)

        看一個例子:

        function* gen(x) { var y = yield x + 2; return y;}var g = gen(1);g.next() // { value: 3, done: false }g.next() // { value: undefined, done: true }

        上面代碼中,調(diào)用 Generator 函數(shù),會返回一個內(nèi)部指針(即遍歷器)g。這是 Generator 函數(shù)不同于普通函數(shù)的另一個地方,即執(zhí)行它不會返回結(jié)果,返回的是指針對象。調(diào)用指針g的next方法,會移動內(nèi)部指針(即執(zhí)行異步任務(wù)的第一段),指向第一個遇到的yield語句,上例是執(zhí)行到x + 2為止。

        換言之,next方法的作用是分階段執(zhí)行Generator函數(shù)。每次調(diào)用next方法,會返回一個對象,表示當(dāng)前階段的信息(value屬性和done屬性)。value屬性是yield語句后面表達(dá)式的值,表示當(dāng)前階段的值;done屬性是一個布爾值,表示 Generator 函數(shù)是否執(zhí)行完畢,即是否還有下一個階段。

        這樣手工的執(zhí)行next()函數(shù),著實(shí)有些麻煩,能寫個工具讓他自動執(zhí)行嗎?那我們就來試試:

        封裝一個 spawn 函數(shù),返回一個 spawn 函數(shù),給函數(shù)傳入 Generator函數(shù)作為參數(shù),spawn 實(shí)現(xiàn) next() 方法的執(zhí)行。

        function fn(args) { return spawn(function* () { // ... });}

        spawn 函數(shù)的實(shí)現(xiàn):

        function spawn(genF) { return new Promise(function(resolve, reject) { const gen = genF(); function step(nextF) { let next; try { next = nextF(); } catch(e) { return reject(e); } if(next.done) { return resolve(next.value); } Promise.resolve(next.value).then(function(v) { step(function() { return gen.next(v); }); }, function(e) { step(function() { return gen.throw(e); }); }); } step(function() { return gen.next(undefined); }); });}

        應(yīng)用這個方法執(zhí)行一下第一個例子:

        function fn(x) { return spawn(function* gen() { var y = yield x + 2 return y; });}fn(1).then((result) => { console.log(result) // 3})

        如果 yield 后面是個 Promise, 就可以實(shí)現(xiàn)異步了:

        function fn(x) { return spawn(function* gen() { var y = yield new Promise((resolve) => { setTimeout(() => { resolve(x + 1) }, 1000) }) return y; });}fn(1).then((result) => { console.log(result) // 過一秒后打印 3})

        這樣,過一秒后就打印 3 了。

        從整個代碼上來看,實(shí)現(xiàn)起來有些麻煩。Async 簡化了一切,使用它,不再需要 spawn 函數(shù),只需將 Generator 函數(shù)的星號(*)替換成async,將yield替換成await,僅此而已。改造一下:

        async function fn(x) { let result = await new Promise((resolve) => { setTimeout(() => { resolve(x + 2) }, 1000) }) return result}fn(1).then((result) => { console.log(result)})

        真是簡潔了很多。

        最后看一個面試題,如何將程序的執(zhí)行結(jié)果 1,3,2,改造為 1,2, 3

        

      hello world

       

        只需修改一個 onGetUser 函數(shù)即可:

        async onGetUser() { // getUser().then((result) => { // console.log(result) // }) let result = await getUser() console.log(result)}

      tags:
      聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
      10年以上業(yè)內(nèi)強(qiáng)師集結(jié),手把手帶你蛻變精英
      請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
      免費(fèi)領(lǐng)取
      今日已有369人領(lǐng)取成功
      劉同學(xué) 138****2860 剛剛成功領(lǐng)取
      王同學(xué) 131****2015 剛剛成功領(lǐng)取
      張同學(xué) 133****4652 剛剛成功領(lǐng)取
      李同學(xué) 135****8607 剛剛成功領(lǐng)取
      楊同學(xué) 132****5667 剛剛成功領(lǐng)取
      岳同學(xué) 134****6652 剛剛成功領(lǐng)取
      梁同學(xué) 157****2950 剛剛成功領(lǐng)取
      劉同學(xué) 189****1015 剛剛成功領(lǐng)取
      張同學(xué) 155****4678 剛剛成功領(lǐng)取
      鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
      董同學(xué) 138****2867 剛剛成功領(lǐng)取
      周同學(xué) 136****3602 剛剛成功領(lǐng)取
      相關(guān)推薦HOT
      適合三農(nóng)領(lǐng)域的名字?有何技巧?

      現(xiàn)在在抖音上很多博主會選擇直播來賺取更多的流量以及利潤,直播間的東西也有很多讓消費(fèi)者信任并且喜歡的,而且隨著越來越多人直播,很多農(nóng)產(chǎn)品...詳情>>

      2023-09-19 07:06:05
      抖店商品發(fā)布違規(guī)怎么申訴?有何規(guī)則?

      抖店服務(wù)市場服務(wù)商發(fā)布違禁信息如何處理?情節(jié)嚴(yán)重程度判定原則:違規(guī)嚴(yán)重等級主要通過服務(wù)商違規(guī)次數(shù)、造成后果的嚴(yán)重程度、獲利或?qū)е聯(lián)p失的...詳情>>

      2023-09-19 06:59:55
      “泛垂直起號”可能是2023年最高效的起號方式

      這可能是明年最好用的旗號方式了,今天教大家一個很野,但是可以讓你三天漲1000粉的偏方。去年前年啊,每個人都教你,誰知七號對著自己的產(chǎn)品拍...詳情>>

      2023-09-19 06:37:38
      做直播怎么賣自己的貨怎么上鏈接?能賺錢嗎?

      直播賣貨是時下非?;鸬囊粋€行業(yè),我們的產(chǎn)品可以放到網(wǎng)上賣,也可以在網(wǎng)上做直播?,F(xiàn)在的直播平臺也是很多的,基本不愁沒有銷路。如果想要賣自...詳情>>

      2023-09-19 06:28:26
      比較適合新手的3個不用出境的領(lǐng)域

      隨著短視頻行業(yè)盛勢發(fā)展,越來越多的年輕人也想要投入這行,但又苦于不想出鏡。抖音短視頻 for Android V24.8.0 安卓手機(jī)版類型:影音播放大小...詳情>>

      2023-09-19 06:06:39
      開班信息
      北京校區(qū)
      • 北京校區(qū)
      • 大連校區(qū)
      • 廣州校區(qū)
      • 成都校區(qū)
      • 杭州校區(qū)
      • 長沙校區(qū)
      • 合肥校區(qū)
      • 南京校區(qū)
      • 上海校區(qū)
      • 深圳校區(qū)
      • 武漢校區(qū)
      • 鄭州校區(qū)
      • 西安校區(qū)
      • 青島校區(qū)
      • 重慶校區(qū)
      • 太原校區(qū)
      • 沈陽校區(qū)
      • 南昌校區(qū)
      • 哈爾濱校區(qū)