• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Javascript中的異步編程規范Promises/A詳細介紹_jquery

    來源:懂視網 責編:小采 時間:2020-11-27 21:24:02
    文檔

    Javascript中的異步編程規范Promises/A詳細介紹_jquery

    Javascript中的異步編程規范Promises/A詳細介紹_jquery:Javascript里異步編程逐漸被大家接受,先前大家一般通過回調嵌套,setTimeout、setInterval等方式實現,代碼看起來非常不直觀,不看整個代碼邏輯很難快速理解。Javascript里異步函數大概有I/O函數(Ajax、postMessage、img load、scri
    推薦度:
    導讀Javascript中的異步編程規范Promises/A詳細介紹_jquery:Javascript里異步編程逐漸被大家接受,先前大家一般通過回調嵌套,setTimeout、setInterval等方式實現,代碼看起來非常不直觀,不看整個代碼邏輯很難快速理解。Javascript里異步函數大概有I/O函數(Ajax、postMessage、img load、scri

    Javascript里異步編程逐漸被大家接受,先前大家一般通過回調嵌套,setTimeout、setInterval等方式實現,代碼看起來非常不直觀,不看整個代碼邏輯很難快速理解。Javascript里異步函數大概有I/O函數(Ajax、postMessage、img load、script load等)、計時函數(setTimeout、setInterval)等。

    這些我們都很熟悉,在復雜的應用中往往會嵌套多層,甚至以為某些步驟未完成而導致程序異常,最簡單的例子:比如你往DOM中注入節點,你必須等待節點注入后在操作這個節點,當大量節點注入的時候,時間往往很難把握。如果我們得代碼依賴第三方api的數據。我們無法獲悉一個API響應的延遲時間,應用程序的其他部分可能會被阻塞,直到它返回結果。Promises對這個問題提供了一個更好的解決方案,它是非阻塞的,并且與代碼完全解耦 。

    那么,我看看Javascript里異步編程,首先推薦大家看看相對來說比較流行的Promises/A規范。

    Promises/A規范

    注:為了便于理解,描述可能和Promises/A規范有所出入;

    CommonJS之Promises/A規范,通過規范API接口來簡化異步編程,使我們的異步邏輯代碼更易理解。
    遵循Promises/A規范的實現我們稱之為Promise對象,Promise對象有且僅有三種狀態:unfulfilled(未完成)、fulfilled(已完成)、failed(失敗/拒絕);初始創建的時候是unfulfilled(未完成)狀態,狀態只可以從unfulfilled(未完成)變成fulfilled(已完成),或者unfulfilled(未完成)變成failed(失敗/拒絕)。狀態一旦變成fulfilled(已完成)或者failed(失敗/拒絕),狀態就不能再變了。

    Promises/A規范提供了一個在程序中描述延時(或將來)概念的解決方案。主要的思想不是執行一個方法然后阻塞應用程序等待結果返回后再回調其他方法,而是返回一個Promise對象來滿足未來監聽。fulfilled狀態和failed狀態都可以被監聽。Promise通過實現一個then接口來返回Promise對象來注冊回調:
    代碼如下:then(fulfilledHandler, errorHandler, progressHandler);

    then接口用于監聽一個Promise的不同狀態。fulfilledHandler用于監聽fulfilled(已完成)狀態,errorHandler用于監聽failed(失敗/拒絕)狀態,progressHandler用于監聽unfulfilled(未完成)狀態。Promise不強制實現unfulfilled(未完成)的事件監聽(例如我們知道舊版本的jQuery(1.5,1.6)的Deferred就是一個Promise的實現,但沒有實現對unfulfilled(未完成)狀態的監聽來回調progressHandler)。

    一般認為,then接口返回的是一個新的Promise對象,而不是原來的Promise對象,這個新的新的Promise對象可以理解為是原來Promise對象的一個視圖,它只包含原有Promise對象的一組方法,這些方法只能觀察原有Promise對象的狀態,而無法更改deferred對象的內在狀態。這樣可以避免多個調用者之間的沖突,多個調用者可以通過改變新的Promise對象狀態而不影響別的調用者。

    另外,Promise提供了resolve(實現狀態由未完成到已完成)和reject(實現狀態由未完成到拒絕或失敗)兩個接口實現狀態的轉變。

    發一張圖片幫助理解一下:

    有了Promise,就可以以同步的思維去編寫異步的邏輯了。在異步函數里,不能使用try/catch捕獲異常,也不能拋出異常。有了Promise,我們可以直接顯式定義errorHandler,相當于捕獲異常。

    以下是幾個遵循Promises/A規范的類庫,when,q,rsvp.js,jQuery.Deferred等等。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Javascript中的異步編程規范Promises/A詳細介紹_jquery

    Javascript中的異步編程規范Promises/A詳細介紹_jquery:Javascript里異步編程逐漸被大家接受,先前大家一般通過回調嵌套,setTimeout、setInterval等方式實現,代碼看起來非常不直觀,不看整個代碼邏輯很難快速理解。Javascript里異步函數大概有I/O函數(Ajax、postMessage、img load、scri
    推薦度:
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 五月花精品视频在线观看| 欧美一区二区精品系列在线观看| 久久国产精品99精品国产| 国产偷窥熟女高潮精品视频| 精品无码一区二区三区爱欲| 欧美精品福利在线视频| 国产精品免费精品自在线观看| 中文国产成人精品久久亚洲精品AⅤ无码精品| 91精品国产自产在线观看| 国产精品无码无在线观看| 在线亚洲精品自拍| 久久精品国产亚洲Aⅴ蜜臀色欲| 亚洲精品电影网| 国产成人亚洲精品| 久久精品亚洲一区二区三区浴池 | 久久66热人妻偷产精品9| 亚洲AⅤ永久无码精品AA| 国产综合精品久久亚洲| 国产成人精品久久亚洲| 亚洲嫩草影院久久精品| 久久99精品国产99久久6男男| 国产精品igao视频网| 熟女精品视频一区二区三区| 尤物国精品午夜福利视频| 亚洲国产精品成人久久蜜臀| 四虎国产精品成人免费久久| 免费国产在线精品一区| 男女男精品视频网站在线观看| 精品人妻少妇一区二区三区不卡| 国产精品hd免费观看| 国产福利精品视频自拍| 98香蕉草草视频在线精品看 | 国产精品www| 国产精品成人va| 老司机99精品99| 一区二区三区四区精品视频| 日韩精品在线视频| 99热亚洲精品6码| 国产免费久久精品丫丫| 久久国产精品免费| 四虎精品免费永久免费视频|