国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

AJAX-day03-AJAX進階

這篇具有很好參考價值的文章主要介紹了AJAX-day03-AJAX進階。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

?(創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡)

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

目錄

同步代碼和異步代碼

回調(diào)函數(shù)地獄 ?

Promise - 鏈式調(diào)用 ?

Promise 鏈式應用

async函數(shù)和await

async函數(shù)和await_捕獲錯誤

事件循環(huán)-EventLoop ?

認識 - 事件循環(huán)(EventLoop)

事件循環(huán) - 執(zhí)行過程

總結?

宏任務與微任務

宏任務與微任務 - 執(zhí)行順序?


同步代碼和異步代碼

同步代碼:AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

異步代碼:AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

同步代碼: 逐行 執(zhí)行,需 原地等待 結果 后,才繼續(xù)向下執(zhí)行
異步代碼:調(diào)用后 耗時 ,不阻塞代碼繼續(xù)執(zhí)行(不必原地等待),在 將來 完成后觸發(fā)一個 回調(diào)函數(shù)

回調(diào)函數(shù)地獄 ?

需求:展示默認第一個省,第一個城市,第一個地區(qū)在下拉菜單中
概念:在回調(diào)函數(shù)中 嵌套回調(diào)函數(shù) ,一直嵌套下去就形成了回調(diào)函數(shù)地獄
缺點:可讀性差,異常無法捕獲,耦合性嚴重,牽一發(fā)動全身

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地區(qū):</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目標:演示回調(diào)函數(shù)地獄
     * 需求:獲取默認第一個省,第一個市,第一個地區(qū)并展示在下拉菜單中
     * 概念:在回調(diào)函數(shù)中嵌套回調(diào)函數(shù),一直嵌套下去就形成了回調(diào)函數(shù)地獄
     * 缺點:可讀性差,異常無法獲取,耦合性嚴重,牽一發(fā)動全身
    */
    // 1. 獲取默認第一個省份的名字
    axios({url: 'http://hmajax.itheima.net/api/province'}).then(result => {
      const pname = result.data.list[0]
      document.querySelector('.province').innerHTML = pname
      // 2. 獲取默認第一個城市的名字
      axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }}).then(result => {
        const cname = result.data.list[0]
        document.querySelector('.city').innerHTML = cname
        // 3. 獲取默認第一個地區(qū)的名字
        axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }}).then(result => {
          console.log(result)
          const areaName = result.data.list[0]
          document.querySelector('.area').innerHTML = areaName
        })
      })
    }).catch(error => {
      console.dir(error)
    })
  </script>
</body>

Promise - 鏈式調(diào)用 ?

概念:依靠 then() 方法會返回一個 新生成的 Promise 對象 特性,繼續(xù)串聯(lián)下一環(huán)任務,直到結束
細節(jié):then() 回調(diào)函數(shù)中的 返回值 ,會影響新生成的 Promise 對象 最終狀態(tài)和結果
好處:通過鏈式調(diào)用,解決回調(diào)函數(shù)嵌套問題

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

<body>
  <script>
    /**
     * 目標:掌握Promise的鏈式調(diào)用
     * 需求:把省市的嵌套結構,改成鏈式調(diào)用的線性結構
    */
    // 1. 創(chuàng)建Promise對象-模擬請求省份名字
    const p = new Promise((resolve, reject) => {
      setTimeout(() => {
        resolve('北京市')
      }, 2000)
    })

    // 2. 獲取省份名字
    const p2 = p.then(result => {
      console.log(result)
      // 3. 創(chuàng)建Promise對象-模擬請求城市名字
      // return Promise對象最終狀態(tài)和結果,影響到新的Promise對象
      return new Promise((resolve, reject) => {
        setTimeout(() => {
          resolve(result + '--- 北京')
        }, 2000)
      })
    })

    // 4. 獲取城市名字
    p2.then(result => {
      console.log(result)
    })

    // then()原地的結果是一個新的Promise對象
    console.log(p2 === p)
  </script>
</body>

Promise 鏈式應用

目標:使用 Promise 鏈式調(diào)用,解決回調(diào)函數(shù)地獄問題

做法:每個 Promise 對象中管理一個異步任務,用 then 返回 Promise 對象,串聯(lián)起來 AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地區(qū):</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目標:把回調(diào)函數(shù)嵌套代碼,改成Promise鏈式調(diào)用結構
     * 需求:獲取默認第一個省,第一個市,第一個地區(qū)并展示在下拉菜單中
    */
    let pname = ''
    // 1. 得到-獲取省份Promise對象
    axios({url: 'http://hmajax.itheima.net/api/province'}).then(result => {
      pname = result.data.list[0]
      document.querySelector('.province').innerHTML = pname
      // 2. 得到-獲取城市Promise對象
      return axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
    }).then(result => {
      const cname = result.data.list[0]
      document.querySelector('.city').innerHTML = cname
      // 3. 得到-獲取地區(qū)Promise對象
      return axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
    }).then(result => {
      console.log(result)
      const areaName = result.data.list[0]
      document.querySelector('.area').innerHTML = areaName
    })
  </script>
</body>

async函數(shù)和await

定義:AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

概念: 在 async 函數(shù)內(nèi),使用 await 關鍵字取代 then 函數(shù),等待獲取 Promise 對象成功狀態(tài)的結果值AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

<body>
  <form>
    <span>省份:</span>
    <select>
      <option class="province"></option>
    </select>
    <span>城市:</span>
    <select>
      <option class="city"></option>
    </select>
    <span>地區(qū):</span>
    <select>
      <option class="area"></option>
    </select>
  </form>
  <script src="https://cdn.jsdelivr.net/npm/axios/dist/axios.min.js"></script>
  <script>
    /**
     * 目標:掌握async和await語法,解決回調(diào)函數(shù)地獄
     * 概念:在async函數(shù)內(nèi),使用await關鍵字,獲取Promise對象"成功狀態(tài)"結果值
     * 注意:await必須用在async修飾的函數(shù)內(nèi)(await會阻止"異步函數(shù)內(nèi)"代碼繼續(xù)執(zhí)行,原地等待結果)
    */
    // 1. 定義async修飾函數(shù)
    async function getData() {
      // 2. await等待Promise對象成功的結果
      const pObj = await axios({url: 'http://hmajax.itheima.net/api/province'})
      const pname = pObj.data.list[0]
      const cObj = await axios({url: 'http://hmajax.itheima.net/api/city', params: { pname }})
      const cname = cObj.data.list[0]
      const aObj = await axios({url: 'http://hmajax.itheima.net/api/area', params: { pname, cname }})
      const areaName = aObj.data.list[0]


      document.querySelector('.province').innerHTML = pname
      document.querySelector('.city').innerHTML = cname
      document.querySelector('.area').innerHTML = areaName
    }

    getData()
  </script>
</body>

async函數(shù)和await_捕獲錯誤

使用:AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

語法:AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

事件循環(huán)-EventLoop ?

認識 - 事件循環(huán)(EventLoop)

概念:AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

原因:JavaScript 單線程(某一刻只能執(zhí)行一行代碼),為了讓耗時代碼不阻塞其他代碼運行,設計了事件循環(huán)模型

事件循環(huán) - 執(zhí)行過程

定義:執(zhí)行代碼和收集異步任務的模型,在調(diào)用??臻e,反復調(diào)用任務隊列里回調(diào)函數(shù)的執(zhí)行機制,就叫事件循環(huán)

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascriptAJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

總結?

1. 什么是事件循環(huán)?
???????? 執(zhí)行代碼 和收集異步任務,在調(diào)用??臻e時,反復調(diào)用任務隊列里回調(diào)函數(shù)執(zhí)行機制
2. 為什么有事件循環(huán)?
????????JavaScript 是單線程的,為了 不阻塞 JS 引擎 ,設計執(zhí)行代碼的模型
3. JavaScript 內(nèi)代碼如何執(zhí)行?
????????執(zhí)行同步代碼,遇到 異步代碼 交給 宿主 瀏覽器環(huán)境執(zhí)行
????????異步有了結果后,把回調(diào)函數(shù)放入 任務隊列排隊
????????當調(diào)用棧 空閑 后,反復調(diào)用任務隊列里的回調(diào)函數(shù)

宏任務與微任務

ES6 之后引入了 Promise 對象, 讓 JS 引擎也可以發(fā)起異步任務
異步任務分為:
???????? 宏任務 :由 瀏覽器 環(huán)境執(zhí)行的異步代碼
???????? 微任務 :由 JS 引擎 環(huán)境執(zhí)行的異步代碼

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

Promise 本身是同步的,而then和catch回調(diào)函數(shù)是異步的

宏任務與微任務 - 執(zhí)行順序?

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript

AJAX-day03-AJAX進階,# 前端AJAX,ajax,前端,javascript,ecmascript文章來源地址http://www.zghlxwxcb.cn/news/detail-600478.html

到了這里,關于AJAX-day03-AJAX進階的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 前端架構師之01_JavaScript_Ajax

    1.1 Web服務器 Web服務器又稱為網(wǎng)站服務器,主要用于提供網(wǎng)上信息瀏覽服務。 常見的Web服務器軟件有Apache HTTP Server(簡稱Apache)、Nginx等。 瀏覽器與服務器交互 在Web服務器中,請求資源又分為靜態(tài)資源和動態(tài)資源。 靜態(tài)資源的特點:只要服務器沒有修改這些文件,客戶端每

    2024年02月07日
    瀏覽(44)
  • 前端同步異步講解--Ajax(axios進階)的相關操作

    前端同步異步講解--Ajax(axios進階)的相關操作

    之前我們講到了數(shù)據(jù)在前后端傳輸是依賴xml文件,但是由于時代變遷,他也已經(jīng)比逐步淘汰,json對象就逐步開始作為數(shù)據(jù)傳輸通道的橋梁,忘記的話可以去回顧文章對應的json對象 最全的前端知識之css與jsp介紹-CSDN博客 文章瀏覽閱讀1k次,點贊31次,收藏21次。ok了,寶子們,

    2024年02月21日
    瀏覽(26)
  • 前端學習記錄~2023.8.10~JavaScript重難點實例精講~第6章 Ajax

    前端學習記錄~2023.8.10~JavaScript重難點實例精講~第6章 Ajax

    本章是第六章Ajax相關的內(nèi)容。 Ajax是一種流行的前后端數(shù)據(jù)交互的方式,通過異步請求就可以在不需要刷新頁面的情況下,達到局部刷新的效果。 Ajax并非是一種全新的技術,而是由以下技術組合而成: 使用CSS和XHTML做頁面呈現(xiàn) 使用DOM進行交互和動態(tài)顯示 使用XMLHttpRequest對象

    2024年02月11日
    瀏覽(57)
  • 前端JavaScript入門-day03

    前端JavaScript入門-day03

    (創(chuàng)作不易,感謝有你,你的支持,就是我前行的最大動力,如果看完對你有幫助,請留下您的足跡) 目錄 1、循環(huán)-for 1.?for 循環(huán)-基本使用 1. for循環(huán)語法 2. 退出循環(huán)? 2. for 循環(huán)嵌套? 2、數(shù)組? 1 數(shù)組是什么 2 數(shù)組的基本使用? 1. 聲明語法 2. 取值語法? 3. 一些術語:? 4. 遍歷

    2024年02月11日
    瀏覽(16)
  • javascript常見100問|前端基礎知識|問ajax-fetch-axios-區(qū)別請用 XMLHttpRequestfetch 實現(xiàn) ajax節(jié)流和防抖px em rem vw/箭頭函數(shù)的缺點

    HTML CSS JS HTTP 等基礎知識是前端面試的第一步,基礎知識不過關將直接被拒。本章將通過多個面試題,講解前端??嫉幕A知識面試題,同時復習一些重要的知識點。 扎實的前端基礎知識,是作為前端工程師的根本。基礎知識能保證最基本的使用,即招聘進來能干活,能產(chǎn)出

    2024年04月27日
    瀏覽(34)
  • Ajax 筆記(四)—— Ajax 進階

    Ajax 筆記(四)—— Ajax 進階

    Ajax 筆記: Ajax 筆記(一)—— Ajax 入門 Ajax 筆記(二)—— Ajax 案例 Ajax 筆記(三)—— Ajax 原理 Ajax 筆記(四)—— Ajax 進階 Ajax 筆記接口文檔: https://apifox.com/apidoc/shared-fa9274ac-362e-4905-806b-6135df6aa90e/doc-842135 JavaScript 是單線程的語言,意味著它只有一個主線程用來執(zhí)行代

    2024年02月13日
    瀏覽(16)
  • 什么是AJAX?如何使用原生JavaScript進行AJAX請求?

    什么是AJAX?如何使用原生JavaScript進行AJAX請求?

    前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發(fā)者,這里都將為你提供一個系統(tǒng)而又親切的學習平臺。在這個

    2024年02月07日
    瀏覽(29)
  • 什么是AJAX?如何使用原生JavaScript搭建AJAX請求?

    什么是AJAX?如何使用原生JavaScript搭建AJAX請求?

    前端入門之旅:探索Web開發(fā)的奇妙世界 歡迎來到前端入門之旅!感興趣的可以訂閱本專欄哦!這個專欄是為那些對Web開發(fā)感興趣、剛剛踏入前端領域的朋友們量身打造的。無論你是完全的新手還是有一些基礎的開發(fā)者,這里都將為你提供一個系統(tǒng)而又親切的學習平臺。在這個

    2024年02月11日
    瀏覽(29)
  • 03 Web全棧 瀏覽器內(nèi)置對象/事件/ajax

    03 Web全棧 瀏覽器內(nèi)置對象/事件/ajax

    瀏覽器是一個JS的運行時環(huán)境,它基于JS解析器的同時,增加了許多環(huán)境相關的內(nèi)容,用一張圖表示各個運行環(huán)境和JS解析器的關系如下: 我們把常見的,能夠用JS這門語言控制的內(nèi)容稱為一個JS的運行環(huán)境,常見的運行環(huán)境又Nodejs,瀏覽器,小程序,一些物聯(lián)網(wǎng)設備等等,所

    2024年02月11日
    瀏覽(27)
  • javascript的ajax

    JavaScript的AJAX(Asynchronous JavaScript and XML)處理是一種用于在后臺與服務器進行異步數(shù)據(jù)交互的技術。它允許你在不刷新整個頁面的情況下,通過JavaScript發(fā)送HTTP請求,并異步獲取服務器返回的數(shù)據(jù)。 AJAX的實現(xiàn)通常涉及以下幾個核心組件和步驟: 創(chuàng)建XMLHttpRequest對象(XHR):

    2024年02月12日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包