1. 程式人生 > >GAMELOFT9----讀萬卷書,行萬里路,知行合一

GAMELOFT9----讀萬卷書,行萬里路,知行合一

Deferred物件是由$.Deferred構造的,$.Deferred被實現為簡單工廠模式

它用來解決JS中的非同步程式設計,它遵循 Common Promise/A 規範。實現此規範的還有 when.js 和 dojo

$.Deferred作為新特性首次出現在版本1.5中,這個版本利用Deferred又完全重寫了Ajax模組。

$.Deferred在jQuery程式碼自身四處被使用,分別是promise方法、DOM readyAjax模組、動畫模組。

這裡以版本1.8.3分析,由於1.7$.Callbacks從Deferred中抽離出去了,目前版本的deferred.js程式碼不過150行,而真正$.Deferred的實現只有100行左右。

$.extend標示符$上掛了兩個方法,如下

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 jQuery.extend({ Deferred: function( func ) { var tuples = [ // action, add listener, listener list, final state
"resolve""done", jQuery.Callbacks("once memory"), "resolved" ], "reject""fail", jQuery.Callbacks("once memory"), "rejected" ], "notify""progress", jQuery.Callbacks("memory") ] ], ... // All done! return deferred; }, // Deferred helper when: function
( subordinate /* , ..., subordinateN */ ) { var i = 0, resolveValues = core_slice.call( arguments ), length = resolveValues.length, .... return deferred.promise(); } });

$.Deferred的實現

  1. 建立三個$.Callbacks物件,分別表示成功,失敗,處理中三種狀態
  2. 建立了一個promise物件,具有state、always、then、primise方法
  3. 通過擴充套件primise物件生成最終的Deferred物件,返回該物件

$.when的實現

  1. 接受若干個物件,引數僅一個且非Deferred物件將立即執行回撥函式
  2. Deferred物件和非Deferred物件混雜時,對於非Deferred物件remaining減1
  3. Deferred物件總數 = 內部構建的Deferred物件 + 所傳引數中包含的Deferred物件
  4. 所傳引數中所有Deferred物件每當resolve時remaining減1,直到為0時(所有都resolve)執行回撥

這就是$.Deferred和$.when的全部了,各個方法及使用稍後介紹。

程式碼閱讀中會發現then和when方法的實現最難理解,看多次,後感回味無窮,非常巧妙。then內部會用到不同尋常的遞迴,when用到了計數,每次非同步成功後減一,直到為0後表示全部非同步操作成功,這時才可執行回撥。

上面提到Deferred裡有3個$.Callbacks的例項,Deferred自身則圍繞這三個物件進行更高層次的抽象。以下是Deferred物件的核心方法

  • done/fail/progress 是 callbacks.add,將回調函式存入
  • resolve/reject/notify 是 callbacks.fire,執行回撥函式(或佇列)

下面舉一些示例看看如何使用Deferred物件。

一、done/resolve

相關推薦

GAMELOFT9----合一

Deferred物件是由$.Deferred構造的,$.Deferred被實現為簡單工廠模式。 它用來解決JS中的非同步程式設計,它遵循 Common Promise/A 規範。實現此規範的還有 when.js 和 dojo。 $.Deferred作為

#不如#

解決 其中 進入 好好學習 談戀愛 純粹 不解釋 痛苦 會有 #讀

從“”到“如何做到合一

生活不是抽象任性的美好暢想,是具體而細微的實際行動。讓自己慢下來,從容做事,優雅生活,這才是生活的最終目的。 ——吳軍 一、我們為什麼要閱讀 現在是一個電子媒體高度發達的時代,尤其內容展示的方式上是非常豐富的。在這種情況下,人真正用來讀文字的時間相對是減少的。 如今,很多人慢慢都

【Sean的專欄】胸中脫去塵濁自然丘壑內營立成鄄鄂!

本人擁有該Blog內全部原創文章的所有權利。歡迎以任何形式轉載,但務必註明原文連結。任何個人、組織、網站、出版社不得在未經本人許可的情況下用於商業目的。 如果我的博文對你有所幫助,歡迎你評論留言,這是對我最大的鼓勵。如果你發現我的博文有謬誤,請你務必指正,這是對我和其他讀者的莫

數論-模運算歐幾擴充套件歐幾

一:模運算 1:餘數:a對b取模的結果就是a除以b的餘數,記作a%b。例如24%5 == 4 2:性質: \[ (a+b)\%p=(a\%p+b\%p)\%p \] \[ (a-b)\%p=(a\%p-b\%p+p)\%p \] \[ (a*b)\%p=(a\%p)*(b\%p)\%p \] 二:

Vue 全域性例項我想單獨在js裡面用(許可權路由的時候或者攔截器時候)填坑之

首先我有一個校驗需要用到vue例項 export const rules = { empty: [ (value) => !!value || this.$t('valid.empty'), ], email: [

尤拉路徑歐拉回並查集

1.1 定義 對於圖G,若存在一條路徑,經過G中每條邊有且僅有一次,稱這條路為尤拉路徑;如果存在一條迴路經過G每條邊有且僅有一次,稱這條迴路為歐拉回路。具有歐拉回路的圖成為尤拉圖。 1.2 判斷尤拉路徑是否存在的方法 有向圖:圖連通,且只有一個頂點出度大入度1,有一

程式設計師按程式碼數算工資員工利用規則賺2.6隔天卻辭職了

對於職場朋友來說,工資無疑是對於自己最重要的,每家公司對於員工的工資都有一定的標準,有些是恆定的,也有一些是根據一些因素來決定的,難麼你知道程式設計師的工資都是如何規定的嗎?最近看到一個很有意思的工資標準。 一位朋友說自己以前在一家公司工作,這家公司對於程式設計師的工資是按照程式碼行數來算工資的

耗時三年14 50 年前阿波羅 11 號登月的全部程式碼都能在 GitHub 找到了!

專案地址:https://github.com/chrislgarry/Apollo-11 50 年前的今天,美國宇航員尼爾森·

豐國際開戶電話17308833338盛放雪花傾心香約

雪花 十裏 雪花十裏,唯一朵在心上,喜歡如此深情唯美句子,漸漸入了其中,坐在一盞光陰的茶裏,倒影愛情的模樣。畫風未曾變過,只一筆,僅此一句,點了眉心朱砂,一往深情,微瀾幾分,這稚嫩的伏筆,也只是為了,尋根執著的風。多想,盛放雪花,傾心香約,飛舞滿天,於天地徜徉,不問其他。即便須臾間,只有一個你,一個我

字總結:學習MySQL優化原理這一篇就夠了!

ade min() 全表掃描 搜索 財務 兼容 嵌套循環 很大的 完成 前言 說起MySQL的查詢優化,相信大家收藏了一堆奇技淫巧:不能使用SELECT *、不使用NULL字段、合理創建索引、為字段選擇合適的數據類型..... 你是否真的理解這些優化技巧?是否理解其背後的工

刷交通的沃爾瑪卡了準備去刷1000元10積分姿勢

沃爾瑪 滿足 綁定 均可 微信 準備 開頭 消費 積分 1、6月份滿足最紅星期五5%的資格了;從7月份開始,不限定指定卡才能享受最紅星期五了,名下任意卡均可享受。當然白金最好,因為是返還10%,不過我的沃爾瑪是金卡,只能刷金卡了。2、本月先到買單吧,兌換沃爾瑪卡10萬積分,

淘寶之如何選擇一款爆款產品超常規與營銷戰略店鋪流量破

小白 要去 定位 發展 用戶 操作 管理 標題 演練 社會發展迅速且多變,隨著電商行業的崛起很多新的事物也相應出現,這就意味著我們不能用舊的眼光去看待舊的事物,要跟上社會進化的腳步,新的一年淘寶店鋪的限制越來越多,淘寶也越來越難運營,相信很多人不知道該往哪個方向發展,下面小

奧賽雲夾文件管理3000中小微企業高效辦公的新選擇

目前,我國中小微企業已經達到3000多萬家,90%以上的是中小微企業。中小企業往往人數不多,大部分都不具備自建機房和配置專職IT維護人員。而且一般中小企業的體量較小、經費有限,無法滿足部署一套專業檔案管理系統所需的軟體、硬體裝置、人工等成本。因此,有許多中小企業依然在採用傳統的郵箱、微信、Q

詳解向鎖尤拉旋轉角slam中向鎖的理解

第一步:先花10分鐘看一下這個下面是的視訊,絕對有用! http://v.youku.com/v_show/id_XNzkyOTIyMTI=.html 萬向鎖含義:當兩個旋轉軸重合時,導致只剩了2個旋轉,2個旋轉不能將所有情況進行描述。 第二步: 看視訊,如果還不理解,請拿出手機,跟

市值3億的facebook再出醜聞你的數據到底應該歸誰?

科技 機制 關註 無限 註意 提高 學習 cef 一個 最近一則《Facebook隱私泄露事件繼續發酵,黑客明碼標價出售聊天信息》的新聞被爆出,一個用戶的信息被標價10美分。讓人不禁感慨,3萬億市值的facebook,用戶數據竟然如此便宜。

全球最大“人造大腦”啟動100ARM晶片每秒200億次操作

大腦是身體中最複雜的器官,也是最難解開的器官。科學家已經開發出多種方法來更好地瞭解大腦,包括使用超級計算機。 世界上最大的神經形態超級計算機Spiking Neural Network Architecture(SpiNNaker)日前首次啟用,它擁有100萬個處理器核心,每

6個不為人知的高質量APP推薦:乎3人點贊2人收藏!

一談到高質量APP想必大部分人都提到:微信,淘寶,今日頭條等等,但是今天為大家分享的這6個不為人知的高質量APP推薦,可能大部分人都從來沒有聽說過,但其功能絕對令人咂舌!知乎裡面已經有3萬多人點贊,2萬人收藏了!還等什麼趕快行動。 1:VIP瀏覽器 軟體介紹:一款可以免費收看海量VIP影視資源的瀏覽器

#國企年薪20女員工想轉行當程式設計師網友:你還是太年輕

看到這樣一則帖子,一女網友發帖吐槽了自己的工作,表示自己想要從國企跳槽到網際網路公司,但是覺得工作很壓抑看不到未來的希望,打算辭職考研,出來做一名演算法工程師,做一個有獨立想法敢於活出自我的女程式設計師。 如果有想學習java的程式設計師,可來我們的java學習扣qun:72340,3928

MySQL 億級資料需求的優化思路(二)100億資料1字段屬性的秒級檢索

最近在研究億級資料的時候,無意中看到了一個關於寫58同城的文章 https://blog.csdn.net/admin1973/article/details/55251499?from=timeline 其實上面講的version+ext的方式以及壓縮json的思路,對於我來講都可以看得懂