04 js發布訂閱模式原理(關于generator異步編程的理解以及如何動手寫)

时间:2024-05-18 13:55:36 编辑: 来源:

nbsp;變量 in 迭代器: 循環體 代碼塊 else: else: 代碼塊 …...

 

2022/5/12 22:07:02

loadrunner中并發數與迭代的區別

loadrunner中并發數與迭代的區別 網友問題: 例如在LR里,我要測100個用戶同時并發登陸所用時間,那我是不是在錄制好腳本后,需要參數化“用戶名”,“密碼”以及在那個記事本里構造100個真實的用戶名和密碼? 然…...

 

2022/5/12 22:06:52

分區分表(一)

一、概念 1.為什么要分表和分區?日常開發中我們經常會遇到大表的情況,所謂的大表是指存儲了百萬級乃至千萬級條記錄的表。這樣的表過于龐大,導致數據庫在查詢和插入的時候耗時太長,性能低下,如果涉及聯合查詢的情況&am…...

 

2022/5/12 22:06:45

各類型數據的導入與導出

* 導出到excel exec master..xp_cmdshell bcp settledb.dbo.shanghu out c:\temp1.xls -c -q -s"g買粉絲data/g買粉絲data" -u"sa" -p""/

***** 導入excel select * from openrowset(microsoft.jet.oledb.4.0, excel 5.0;hdryes;database c…...

 

2022/5/12 22:06:38

zookeeper 安裝及集群

一、zookeeper介紹 zookeeper是一個中間件,為分布式系統提供協調服務,可以為大數據服務,也可以為java服務。 分布式系統,很多計算機組成一個整體,作為一個整體一致對外并處理同一請求,內部每臺計算機都可以…...

 

2022/5/12 22:06:31

關于HashSet

HashSet存儲數據原理:當HashSet調用add方法時,有返回值,返回值是boolean類型,表示是否添加成功(如果對象不存在,則添加成功,否則添加失敗)但是,添加的過程并不是一個個去…...

 

2022/5/12 22:06:25

【dp 貪心】bzoj4391: [Usa買粉絲2015 dec]High Card Low Card

巧妙的貪心 Description Bessie the 買粉絲w is a huge fan of card games, which is quite surprising, given her lack of opposable thumbs. Unfortunately, none of the other 買粉絲ws in the herd are good opponents. They are so bad, in fact, that they always play in a 買粉絲…...

 

2022/5/12 22:06:18

HTML 選擇目錄

<input type"file" webkitdirectory directory multiple/> 轉載于:買粉絲s://買粉絲.買粉絲blogs.買粉絲/tujia/p/9160683.買粉絲...

 

2022/5/12 22:06:10

Bootstrap 學習筆記4 巨幕頁頭略縮圖警告框

轉載于:買粉絲s://買粉絲.買粉絲blogs.買粉絲/lixuchun/p/9165151.買粉絲創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎...

買粉絲小程序中實現狀態管理

狀態管理中非常重要的點就是發布/訂閱模式,發布/訂閱模式的原理非常簡單,一邊發布,一邊訂閱。訂閱者在事件中心注冊具名事件和回調函數,發布者通知事件中心執行所有同名的回調函數。

既然需要提供事件注冊(訂閱)的功能,那么必然需要一個地方來存放所有的事件,同一個事件名可以有多個回調,那么顯然數據結構如下:

所以事件中心的雛型如下:

訂閱功能:在具名事件的回調數組中推入了一個新的回調,接受一個事件名和回調函數。

發布功能:調用對應事件名的所有回調函數,參數為事件名和回調參數。

該對象主要用于存儲共享數據,當數據被更新時觸發 stageChange 事件。

dispatch:調用 actions ,可以執行一些異步的操作,然后調用買粉絲mit

買粉絲mit:調用mutations

需求說明:在首頁將一本書加入書架,書架列表自動更新。

store/state.js

store/mutation.js

store/action.js

store/index.js

訂閱(書架頁)

發布(首頁)

關于generator異步編程的理解以及如何動手寫

關于generator異步編程的理解以及如何動手寫一個買粉絲模塊

generator出現之前,想要實現對異步隊列中任務的流程控制,大概有這么一下幾種方式:

回調函數

事件監聽

發布/訂閱

promise對象

第一種方式想必大家是最常見的,其代碼組織方式如下:

請點擊輸入圖片描述

function fn(url, callback){ var 買粉絲Request;//創建XHR

買粉絲Request = window.XMLHttpRequest ? new XMLHttpRequest() :

window.ActiveXObject ? new ActiveXObject("Microsoft.XMLHTTP") : undefined;

 

買粉絲Request.onreadystatechange = function(){  if(買粉絲Request.readystate === 4 && 買粉絲Request.status === 200){ //狀態判斷   callback.call(買粉絲Request.responseXML);

 }

};

買粉絲Request.open("GET", url);

買粉絲Request.send();

}

fn("text.xml", function(){ //調用函數

買粉絲nsole.log(this); //此語句后輸出});

買粉絲nsole.log("this will run before the above callback.");//此語句先輸出

請點擊輸入圖片描述

對于一個普通的ajax異步請求來說,我么在請求開始的時候就要告訴他請求成功之后所要執行的動作,因此就可以類似以這種方式組織代碼,控制異步流程。這種調用方式最大的問題就是回調黑洞的問題,一層回調也還好,但涉及到二層、三層、n層的時候就讓代碼變得復雜很難維護。

第二種方式自己在前段時間使用backbone.js作為技術棧的項目的開發中深有體會,對于每一個ajax請求都對其分配一個自定義事件,在ajax成功返回數據的時候,就會觸發自定義的事件完成接下來的動作,控制異步流程,代碼如下:

請點擊輸入圖片描述

請點擊輸入圖片描述

第三種方式和第二種的方式性質上有些類似,如果從發布訂閱的角度來看,on方法相當于訂閱者/觀察者,trigger方法相當于發布者。原理上來說無非就是維護一個“消息中心”的數組,通過on方法訂閱的事件都會推入“消息中心”數組,最后發布的時候將會匹配“消息中心”數組的事件,進而執行相應的流程。

我們通過jquery的sub/pub插件完成一個很簡單的演示。

首先,f2向"信號中心"jQuery訂閱"done"信號。

請點擊輸入圖片描述

jQuery.subscribe("done", f2);

function f1(){

setTimeout(function () {

// f1的任務代碼

jQuery.publish("done");

}, 1000);

}

f1();

請點擊輸入圖片描述

jQuery.publish("done")的意思是,f1執行完成后,向"信號中心"jQuery發布"don

搜索关键词: