中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

當前位置: 首頁 / 技術干貨 / 正文
Promise、generato....sync類同步編程

2022-11-25

   res ajax

  受javascript語言特性的影響,編程過程中充斥著大量異步回調,這會讓代碼維護起來特別麻煩,一步步走向回調地獄。社區中最早提出Promise解決方案,es6將其融入語法標準,并提供了generator、async,向類同步編程不斷努力。本文會通過這三個方面演示類同步進化過程。 ##1.Promise Promise提供異步編程的容器,包含異步代碼,在得到異步結果時,通過resolve傳遞數據(resove對應then所指定的函數,其實也就是單個過程的異步回調,可以理解成將之前的回調函數放在then方法中定義)。 ######以ajax請求封裝為例:

好程序員

  傳統形式

  function ajax(url, success) {

  var xhr = new XMLHttpRequest();

  xhr.open("GET", url);

  xhr.send();

  xhr.onreadystatechange = function () {

  if (xhr.status == 200 && xhr.readyState == 4) {

  //將請求結果作為實參傳入成功回調

  success(xhr.responseText);

  }

  }

  }

  //如果兩個異步過程有先后順序,則會出現這種嵌套情況

  ajax("http://vebcoder.cn:9527/api/getTypeOne", function (res) {

  console.log(res);

  ajax("http://vebcoder.cn:9527/api/goodList", function (res) {

  console.log(res);

  })

  })

  Promise形式

  function ajax(url) {

  //promise容器包裹異步過程

  return new Promise(resolve => {

  var xhr = new XMLHttpRequest();

  xhr.open("GET", url);

  xhr.send();

  xhr.onreadystatechange = function () {

  if (xhr.status == 200 && xhr.readyState == 4) {

  //將異步結果使用resolve進行傳遞

  resolve(xhr.responseText);

  }

  }

  })

  }

  ajax("http://vebcoder.cn:9527/api/getTypeOne")

  .then(res=>{

  console.log(JSON.parse(res))

  })

  .then(()=>{

  return ajax("http://vebcoder.cn:9527/api/goodList")

  })

  .then(res=>{

  console.log(JSON.parse(res))

  })

  解決了回調函數橫向發展的問題,變成了縱向發展結構。直觀確實很直觀但是一大堆的then方法,!接下來generator登場

  2.generator

  乍一看,generator不過是一個有多個返回值的函數而已,奧妙在于如果不調用next方法,代碼會停止執行的。

  基礎用法

  //function后加*

  function* Gen(){

  console.log(1);

  yield;

  console.log(2)

  yield;

  console.log(3);

  return;

  }

  //調用函數獲得指針對象

  var g=Gen();

  g.next();//1

  g.next();//2

  g.next();//3

  第一次調用next執行到第一個yield,第三次執行到函數末尾return的位置。

  奧妙之處

  function* Gen(){

  //用變量接收yield命令

  var res=yield;

  console.log(res)

  }

  var g=Gen();

  g.next();

  //next傳入參數

  g.next(100);//100

  第一次調用next方法,代碼執行到yield停止執行。第二次調用next傳入參數,代碼繼續執行,并將傳入next的參數賦值給res變量。next方法可以帶一個參數,該參數就會被當作上一個yield表達式的返回值。 那么我們就可以這樣做:

  //上述封裝的ajax方法-傳統形式

  function* Gen(){

  //請求成功開始下一步

  ajax("http://vebcoder.cn:9527/api/getTypeOne",res=>{g.next(res)})

  // 接收yield返回值

  let res=yield;

  console.log(res)//請求的數據結果

  }

  var g=Gen();

  // 開始執行代碼

  g.next();

  //上述封裝的ajax方法-Promise形式

  function* Gen(){

  //請求成功開始下一步

  ajax("http://vebcoder.cn:9527/api/getTypeOne").then(res=>{g.next(res)})

  // 接收yield返回值

  let res=yield;

  console.log(res)//請求的數據結果

  }

  var g=Gen();

  // 開始執行代碼

  g.next();

  使用口訣:上一步回調,下一步,接收yield等待結果傳入

  按理說這種形式已經不錯了,不用再往下看了,除非你能忍住!

  3.async

  async是generator的語法糖,你只需關注兩部、步操作就行。相當于對Promise和generator進行了融合。

  async function Asy(){

  //等待promise實例

  let res=await ajax("http://vebcoder.cn:9527/api/getTypeOne")

  console.log(res)//請求的數據結果

  }

  Asy();

  //結合自執行函數

  ;(async function(){

  let res=await ajax("http://vebcoder.cn:9527/api/getTypeOne")

  console.log(res)//請求的數據結果

  }())

  async函數就是將Generator 函數的星號(*)替換成async,將yield替換成await。 注意:await后面需要跟一個promise實例,無需手動傳遞結果!

  最后來一個對比(有次序的異步過程):

  //傳統方式(對應上述傳統ajax封裝形式)

  ajax("http://vebcoder.cn:9527/api/getTypeOne", function (res) {

  console.log(res);

  ajax("http://vebcoder.cn:9527/api/goodList", function (res) {

  console.log(res);

  })

  })

  //promise (對應上述promise ajax封裝形式)

  ajax("http://vebcoder.cn:9527/api/getTypeOne")

  .then(res=>{

  console.log(JSON.parse(res))

  })

  .then(()=>{

  return ajax("http://vebcoder.cn:9527/api/goodList")

  })

  .then(res=>{

  console.log(JSON.parse(res))

  })

  //generator (對應上述promise ajax封裝形式)

  function* Gen(){

  //請求成功開始下一步

  ajax("http://vebcoder.cn:9527/api/getTypeOne").then(res=>{g.next(res)})

  // 接收yield返回值

  let res=yield;

  console.log(res);

  ajax("http://vebcoder.cn:9527/api/goodList").then(res=>{g.next(res)})

  // 接收yield返回值

  let res2=yield;

  console.log(res2);

  }

  var g=Gen();

  // 開始執行代碼

  g.next();

  //async (對應上述promise ajax封裝形式)

  // 發送請求

  ;(async function(){

  let res=await ajax("http://vebcoder.cn:9527/api/getTypeOne")

  console.log(res)//請求的數據結果

  let res2=await ajax("http://vebcoder.cn:9527/api/goodList")

  console.log(res2)//請求的數據結果

  }())

  async有更好的語義,幾乎達到與同步代碼一樣的編程體驗!

好程序員公眾號

  • · 剖析行業發展趨勢
  • · 匯聚企業項目源碼

好程序員開班動態

More+
  • HTML5大前端 <高端班>

    開班時間:2021-04-12(深圳)

    開班盛況

    開班時間:2021-05-17(北京)

    開班盛況
  • 大數據+人工智能 <高端班>

    開班時間:2021-03-22(杭州)

    開班盛況

    開班時間:2021-04-26(北京)

    開班盛況
  • JavaEE分布式開發 <高端班>

    開班時間:2021-05-10(北京)

    開班盛況

    開班時間:2021-02-22(北京)

    開班盛況
  • Python人工智能+數據分析 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2020-09-21(上海)

    開班盛況
  • 云計算開發 <高端班>

    開班時間:2021-07-12(北京)

    預約報名

    開班時間:2019-07-22(北京)

    開班盛況
IT培訓IT培訓
在線咨詢
IT培訓IT培訓
試聽
IT培訓IT培訓
入學教程
IT培訓IT培訓
立即報名
IT培訓

Copyright 2011-2023 北京千鋒互聯科技有限公司 .All Right 京ICP備12003911號-5 京公網安備 11010802035720號

中文在线免费看视频_国产成人精品亚洲日本在线观看_亚洲精品第一综合99久久_国产亚洲精品日韩综合网

            国产 日韩 欧美大片| 欧美亚一区二区| 欧美一卡二卡三卡| 一区av在线播放| 色www精品视频在线观看| 国产精品网曝门| 国产一区二区久久| 久久亚洲影视婷婷| 黄色成人免费在线| 精品国产乱码久久久久久老虎 | 极品少妇一区二区三区精品视频| 欧美精品色一区二区三区| 一区二区欧美国产| 91一区一区三区| 亚洲欧洲中文日韩久久av乱码| 成人午夜看片网址| 国产精品免费免费| 99久久精品费精品国产一区二区| 中文字幕一区在线| 91亚洲国产成人精品一区二区三| 亚洲欧洲精品一区二区三区 | 国产乱码精品一品二品| 精品国产髙清在线看国产毛片| 奇米影视7777精品一区二区| 欧美一区二区三区四区久久| 久久国产精品99精品国产 | 精品国产91九色蝌蚪| 国产一区二区美女诱惑| 国产欧美精品区一区二区三区 | 亚洲18女电影在线观看| 制服丝袜一区二区三区| 国模套图日韩精品一区二区 | 国产福利一区二区三区视频| 国产三区在线成人av| 99久久免费精品| 香蕉成人啪国产精品视频综合网| 欧美一区二区在线不卡| 国产中文字幕精品| 亚洲毛片av在线| 欧美一区二区三区播放老司机| 激情小说亚洲一区| 亚洲青青青在线视频| 欧美一区二区成人| eeuss鲁片一区二区三区在线观看| 亚洲精品免费在线| 精品久久久久久久人人人人传媒| 国产精品99久久久| 亚洲精品欧美激情| www国产成人| 欧美亚洲国产bt| 国产在线视频一区二区三区| 亚洲欧美综合另类在线卡通| 欧美一级日韩免费不卡| caoporn国产精品| 久久99精品久久只有精品| 成人免费一区二区三区在线观看| 日韩午夜三级在线| 在线观看一区不卡| 成人免费视频国产在线观看| 日本在线不卡一区| 亚洲一区在线视频| 中文字幕成人在线观看| 日韩亚洲欧美一区二区三区| 日本高清不卡视频| 国产91精品在线观看| 美女任你摸久久| 亚洲成国产人片在线观看| 国产免费观看久久| 91麻豆精品国产91久久久久久| 国产激情一区二区三区四区 | 成熟亚洲日本毛茸茸凸凹| 一区二区免费在线播放| 精品久久国产字幕高潮| 日本高清免费不卡视频| 成人综合婷婷国产精品久久 | 色综合激情久久| 成人小视频在线观看| 午夜一区二区三区视频| 欧美高清在线一区| 日韩午夜电影在线观看| 色女孩综合影院| 国产凹凸在线观看一区二区| 日韩激情av在线| 中文字幕乱码亚洲精品一区| 在线观看成人小视频| 成人亚洲一区二区一| 免费一级欧美片在线观看| 亚洲乱码日产精品bd| 国产欧美日韩另类视频免费观看| 欧美日韩精品二区第二页| 9久草视频在线视频精品| 视频精品一区二区| 秋霞电影网一区二区| 亚洲在线视频网站| 国产精品福利av| 国产亚洲美州欧州综合国| 日韩手机在线导航| 在线不卡中文字幕播放| 92国产精品观看| 久久99日本精品| 国产精品影视天天线| 激情综合亚洲精品| 久久成人免费电影| 久久精品国产精品亚洲综合| 婷婷综合另类小说色区| 亚洲成人1区2区| 国产精品麻豆久久久| 亚洲欧美电影一区二区| 《视频一区视频二区| 中文字幕日本不卡| 国产精品国产三级国产普通话三级| 国产无人区一区二区三区| 国产亚洲午夜高清国产拍精品| 精品美女被调教视频大全网站| 日韩欧美在线观看一区二区三区| 91精品视频网| 在线精品国精品国产尤物884a| 在线成人高清不卡| 日韩三级av在线播放| 欧美tickle裸体挠脚心vk| 久久综合色婷婷| 国产日本欧洲亚洲| 国产精品久久久久一区二区三区| 亚洲最大色网站| 日韩精品亚洲一区| 黑人巨大精品欧美黑白配亚洲| 国产精品99久久不卡二区| 岛国精品一区二区| 欧美性受极品xxxx喷水| 91精品1区2区| 久久婷婷久久一区二区三区| 国产精品美女久久久久久| 亚洲欧美另类在线| 亚洲欧美aⅴ...| 视频一区二区国产| 国产一区二区毛片| 在线观看视频欧美| 日韩精品中文字幕一区二区三区| 久久这里只有精品6| 亚洲欧美一区二区在线观看| 亚洲一区视频在线观看视频| 免费人成在线不卡| 久久国产精品区| 欧美性色aⅴ视频一区日韩精品| 日韩一区二区在线观看视频| 国产亚洲一区二区在线观看| 亚洲综合丝袜美腿| 国产一区二三区| 91成人免费在线| 国产精品国产精品国产专区不片| 香蕉加勒比综合久久| 国产精品一区在线观看乱码| 日本久久电影网| 久久婷婷国产综合国色天香 | 91网上在线视频| 在线成人免费观看| 国产精品福利一区二区| 久久99精品国产麻豆婷婷洗澡| 99在线视频精品| 日韩免费观看2025年上映的电影 | 免费av网站大全久久| 蜜桃久久av一区| 在线观看91av| 中文字幕一区二区不卡 | 青青草精品视频| 91啪亚洲精品| 欧美成人午夜电影| 国产精品日日摸夜夜摸av| 免费成人美女在线观看| 91精品福利视频| 亚洲国产精品传媒在线观看| 美女一区二区在线观看| 日本久久一区二区| 国产欧美精品国产国产专区| 日韩高清不卡一区| 欧美综合亚洲图片综合区| 久久午夜免费电影| 蜜臀久久99精品久久久久久9| 一道本成人在线| 欧美成人在线直播| 国产综合久久久久影院| 6080日韩午夜伦伦午夜伦| 亚洲欧美日韩国产成人精品影院 | 狂野欧美性猛交blacked| 欧美视频一区二区三区在线观看| 国产精品国产自产拍高清av| 寂寞少妇一区二区三区| 欧美一区二区日韩一区二区| 午夜久久久影院| 在线观看国产日韩| 一区二区在线观看不卡| 97精品久久久午夜一区二区三区| 久久久久久久一区| 国产乱码精品一区二区三区忘忧草 | 国产精品一二三四五| 久久影院视频免费| 国产一级精品在线| 国产精品久久久久9999吃药| 成人深夜视频在线观看| 国产精品色哟哟网站|