黄视频网站在线免费观看-黄视频网站在线看-黄视频网站在线观看-黄视频网站免费看-黄视频网站免费观看-黄视频网站免费

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 深入淺出ES6——async函數

深入淺出ES6——async函數

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

  ES2017 標準引入了 async 函數,使得異步操作變得更加方便。

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

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

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

  看一個例子:

  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 }

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

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

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

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

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

  spawn 函數的實現:

  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); }); });}

  應用這個方法執行一下第一個例子:

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

  如果 yield 后面是個 Promise, 就可以實現異步了:

  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 了。

  從整個代碼上來看,實現起來有些麻煩。Async 簡化了一切,使用它,不再需要 spawn 函數,只需將 Generator 函數的星號(*)替換成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)})

  真是簡潔了很多。

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

  

hello world

 

  只需修改一個 onGetUser 函數即可:

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

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
開班信息
北京校區
  • 北京校區
  • 大連校區
  • 廣州校區
  • 成都校區
  • 杭州校區
  • 長沙校區
  • 合肥校區
  • 南京校區
  • 上海校區
  • 深圳校區
  • 武漢校區
  • 鄭州校區
  • 西安校區
  • 青島校區
  • 重慶校區
  • 太原校區
  • 沈陽校區
  • 南昌校區
  • 哈爾濱校區
青青久久精品国产免费看| 免费国产在线观看| 亚洲精品久久玖玖玖玖| 日本在线www| 99久久精品国产免费| 免费国产在线视频| 国产亚洲免费观看| 精品毛片视频| 欧美电影免费看大全| 国产伦精品一区三区视频 | 欧美a级大片| 麻豆午夜视频| 国产亚洲精品aaa大片| 四虎影视久久| a级精品九九九大片免费看| 色综合久久天天综线观看| 欧美国产日韩精品| 一级女性大黄生活片免费| 成人免费一级纶理片| 亚洲精品影院| 天天做日日爱夜夜爽| 国产一区精品| 日本伦理网站| 国产精品1024永久免费视频| 国产精品1024永久免费视频| 91麻豆tv| 国产一区免费观看| 日韩男人天堂| 欧美激情一区二区三区在线| 欧美日本韩国| 亚洲 欧美 成人日韩| 久久精品欧美一区二区| 日本免费乱理伦片在线观看2018| 成人a级高清视频在线观看| 日本乱中文字幕系列| 日本在线不卡免费视频一区| 成人影院一区二区三区| 久草免费在线色站| 高清一级做a爱过程不卡视频| 中文字幕一区二区三区精彩视频 | 国产成人精品综合在线| 精品视频在线观看免费| 国产一区二区精品| 人人干人人草| 国产精品免费久久| 国产91丝袜在线播放0| 韩国毛片免费大片| 一级女性大黄生活片免费| 国产91精品一区二区| 国产高清视频免费观看| 国产亚洲男人的天堂在线观看| 韩国毛片免费大片| 欧美大片aaaa一级毛片| 日韩在线观看视频网站| 中文字幕97| 国产国语在线播放视频| 日韩在线观看视频免费| 黄视频网站在线看| 国产网站在线| 国产高清视频免费| 韩国三级香港三级日本三级la| 国产欧美精品| 亚洲精品中文字幕久久久久久| 亚洲wwwwww| 日本在线www| 国产精品1024永久免费视频| 999精品视频在线| 欧美18性精品| 欧美一级视频免费观看| 免费一级生活片| 国产高清视频免费观看| 精品视频免费看| 久久99爰这里有精品国产| 999久久狠狠免费精品| 美女被草网站| 韩国毛片免费大片| 欧美国产日韩在线| 亚洲 国产精品 日韩| 91麻豆精品国产自产在线观看一区| 国产激情一区二区三区| 亚欧成人乱码一区二区| 成人av在线播放| 青青久久精品| 国产精品123| 天天色成人| 香蕉视频亚洲一级| 九九热国产视频| 日本特黄特色aaa大片免费| 午夜精品国产自在现线拍| 国产高清视频免费| 韩国毛片免费| 色综合久久手机在线| 麻豆系列国产剧在线观看| 欧美夜夜骑 青草视频在线观看完整版 久久精品99无色码中文字幕 欧美日韩一区二区在线观看视频 欧美中文字幕在线视频 www.99精品 香蕉视频久久 | 欧美国产日韩在线| 国产网站在线| 免费一级片在线观看| 日韩欧美一及在线播放| 99久久精品国产片| 99色精品| 精品美女| 日韩专区一区| 欧美激情在线精品video| 国产网站麻豆精品视频| 精品国产一区二区三区国产馆| 精品视频在线观看免费| 天天色成人| 国产一区二区高清视频| 欧美a级成人淫片免费看| 韩国三级香港三级日本三级| 日韩字幕在线| 精品毛片视频| 国产不卡在线看| 亚洲第一色在线| 成人免费观看的视频黄页| 日韩在线观看免费完整版视频| 久久国产精品只做精品| 一级毛片视频免费| 精品国产三级a| 国产美女在线一区二区三区| 日本乱中文字幕系列| 国产成人欧美一区二区三区的| 精品国产一区二区三区久久久狼 | 欧美爱色| 精品美女| 二级片在线观看| 精品国产亚洲人成在线| 国产91精品一区二区| 你懂的日韩| 国产一区二区精品在线观看| 欧美另类videosbestsex视频| 中文字幕一区二区三区精彩视频 | 国产精品自拍一区| 久久精品大片| 日本在线不卡视频| 国产精品12| a级黄色毛片免费播放视频| 久久精品成人一区二区三区| 一级女性大黄生活片免费| 国产亚洲男人的天堂在线观看| 亚洲女初尝黑人巨高清在线观看| 日韩中文字幕一区| a级毛片免费全部播放| 国产不卡在线看| 午夜欧美福利| 日韩专区一区| 亚欧成人毛片一区二区三区四区| 欧美国产日韩在线| 国产网站免费在线观看| 午夜久久网| 中文字幕Aⅴ资源网| 台湾毛片| 亚洲 国产精品 日韩| 日韩欧美一二三区| 国产成人精品综合在线| 精品毛片视频| 韩国毛片免费| 国产成人啪精品视频免费软件| 欧美激情一区二区三区视频| 九九热精品免费观看| a级黄色毛片免费播放视频| 日韩女人做爰大片| 国产美女在线观看| 91麻豆国产福利精品| 国产麻豆精品高清在线播放| 国产视频久久久| 你懂的日韩| 国产精品1024永久免费视频| 精品久久久久久综合网| 好男人天堂网 久久精品国产这里是免费 国产精品成人一区二区 男人天堂网2021 男人的天堂在线观看 丁香六月综合激情 | 国产一区二区高清视频| 精品国产一区二区三区精东影业| 欧美a级片视频| 国产一级生活片| 999久久66久6只有精品| 欧美一级视| 久久国产影院| 欧美日本免费| 日本免费区| 精品视频在线观看一区二区 | 欧美国产日韩一区二区三区| 你懂的日韩| 国产成a人片在线观看视频| 色综合久久天天综合观看| 91麻豆爱豆果冻天美星空| 午夜激情视频在线播放| 国产不卡在线看| 成人免费高清视频| 国产一区二区精品尤物| 美女免费精品高清毛片在线视| 国产伦精品一区二区三区无广告| 欧美a免费| 久久国产精品自线拍免费| 精品国产一区二区三区久久久狼 | 亚洲精品影院一区二区| 日本特黄特黄aaaaa大片| 久久99青青久久99久久| 免费一级片网站| 国产成人精品影视| 国产网站在线|