1. 程式人生 > >非同步方法中對於$.Deferred()實際應用

非同步方法中對於$.Deferred()實際應用

本來很久之前就想寫這個來著,可是後來趕著開發,還有自己懶,就沒有寫。今天需要用到deferred的時候還跑來翻翻自己的博文,沒有找到還有點懵逼。所以今天用到了,而且達到了自己想要的效果了,想想還是記下來吧。

程式碼塊用到的easyui的$.messager.progress

關於deferred的定義,我還不是很清楚,可以自行百度,我都是百度的。關於本文的應用,就是想達到:迴圈中的非同步方法執行結束後,再呼叫我想呼叫的方法。

首先非同步方法如下:

	function showPoint(mapPoint,warnTeller){
	    //關於$.Deferred()
		var d = $.Deferred();
		var url = CTX_PATH + "lgyj/transferRiskCount";
		$.post(url,warnTeller,function(data){
		 try{
// 				console.log(x,mapPoint);
				var latlng = new google.maps.LatLng(mapPoint.lat,mapPoint.lng); //點座標
				var icon;
				//根據資料是否有異常設定圖示
				if(data.total > 0){
					icon = '<spring:url value="/resources/map/images/icons/red.png" />';
				}else{
					icon = '<spring:url value="/resources/map/images/icons/green.png" />';
				}
				//新建marker點
				var marker = new google.maps.Marker({
						position: latlng,
						map: map,
						draggable:false,//禁止拖拽
						title:mapPoint.org_name,
						icon:icon,
						org_id:mapPoint.org_id
				}); 
// 				console.log(marker);
				//站點資訊視窗
				var currInfowindow = new google.maps.InfoWindow({
// 						content : getPointHtml(mapPoint.org_id),
						size : new google.maps.Size(210,90)
				});
				//新增點事件
				google.maps.event.addListener(marker, 'click', function(event) {
					var url = CTX_PATH + "lgyj/transferRiskQuery";
					var warnTeller={};
					warnTeller.org_id=this.org_id;
					//查詢資料並放在彈出視窗上
					$.post(url,warnTeller,function(result){
						var html = "<div style='width:350px;height:90px'>";
						if(result.length > 0){
							var num = 0; 
							html = "<table border='1'><tr><th>姓名</th><th>櫃員號</th><th>應輪崗日期</th></tr>"
							for(var i =0 ; i<result.length; i++){
								html += "<tr><td>"+result[i].name+"</td><td>"+result[i].tlr_id+"</td><td>"
								+result[i].deadline_date_str+"</td></tr>"
							}
							html +="</table>"
						}else{
							html += "<strong>提示!</strong> 不存在未輪崗風險人員!"
						}
						html += "</div>";
						clearAllInfoWindow();
						currInfowindow.setContent(html);
						currInfowindow.open(map,marker);
						currInfowindow.setZIndex(1000);
						infowindows.push(currInfowindow);
					},'json');
					});
			}catch(e){
				console.log(e);
        	}finally{
				d.resolve();
        	}
		},'json');
		
		return d;
	}

當然上面的非同步方法裡面還套著一個非同步方法,我然而迴圈的非同步方法就是第一層的$.post方法。

然後新建一個deferreds陣列,然後把呼叫方法return的deferred塞進數組裡,最後在迴圈結束後,在所有非同步方法執行完成後呼叫我想呼叫的方法。如下面程式碼:

	window.onload = function(){
// 		$.messager.alert("警告","申請通過的資料不可編輯")
// 	 	$( "#progressbar" ).progressbar({
//       		value: false
//     	});
	 	
		//初始化map
	 	initialize('map_canvas',def_zoom,lat,lng);
	 	
	 	var mapPoints=${mapPointsJson};
	 	if(mapPoints != null)
	 	{
	 		//進度條彈出 easyui
	 		$.messager.progress({
        		title:'營業點載入中,請等待',
        		msg:'載入中...',
    		});
    		//新建deferred陣列
    		var deferreds = [];
	 		for(x in mapPoints){
				//人員數量
				var warnTeller={};
				warnTeller.org_id=mapPoints[x].org_id;
				var mapPoint=mapPoints[x];
				//顯示marker
				var dp = showPoint(mapPoint,warnTeller);
				deferreds.push(dp);	
			}
			//在所有非同步方法執行完後關閉進度條
			$.when.apply($, deferreds).done(function(){
    			$.messager.progress("close");
    		}).fail(function(){
    			alert("wocaotainanleba");
    		});
			//迴圈解除,關閉
// 			$.messager.progress("close");
	 	}
		google.maps.event.addListener(map,'click',function(event){
			//清理marker的浮窗
			clearAllInfoWindow();
			//限制地圖顯示的層級
			if (map.getZoom() > 15){
				map.setZoom(15);
			} 
			if (map.getZoom() < 7){
				map.setZoom(7);
			}
		});
	}

相關推薦

非同步方法對於$.Deferred()實際應用

本來很久之前就想寫這個來著,可是後來趕著開發,還有自己懶,就沒有寫。今天需要用到deferred的時候還跑來翻翻自己的博文,沒有找到還有點懵逼。所以今天用到了,而且達到了自己想要的效果了,想想還是記下來吧。 程式碼塊用到的easyui的$.messager.progress

非同步方法取消非同步操作

1、在非同步方法中取消非同步操作,第一步必須宣告CancellationToken和CancellationTokenSource兩個類物件,並將兩個類通過 CancellationTokenSource 物件的token屬性關聯; CancellationTokenSource ct

jscookie的實際應用

最近專案開發過程中遇到一個問題,需求是記錄各個許可權使用者最後登入時間,之前沒有細想只是一股腦的把當前時間,以及各種身份驗證資訊塞進方法驗證,然後把該方法放在登入按鈕旁邊,結果測試發現,實際出現情況是

bash實戰篇-數組在工作實際應用(測試環境發布腳本)

數組 腳本 shell 數組在之前已經用過介紹,下面介紹其在工作中的一個實際功用出現的工作背景: 公司測試環境的tomcat的webapps下有3個項目,如果按通常的發布腳本,需要為每一個項目單獨寫一個發布腳本,我感覺太過麻煩,就想能否用一個腳本搞定這3個項目,最開始是在腳本裏面定義三個變量

zookeeper 在項目實際應用

zookeeper curator ZooKeeper所提供的服務主要是通過:數據結構Node+原語+watcher機制ZooKeeper是一個分布式小文件系統,通過選舉算法和集群復制可以避免單點故障,由於是文件系統,所以即使所有的ZooKeeper節點全部掛掉,數據也不會丟失,重啟服務器之後,數據即

spark scala word2vec 和多層分類感知器在情感分析實際應用

predict output edi ext oop post format vector spa 轉自:http://www.cnblogs.com/canyangfeixue/p/7227998.html 對於威脅檢測算法使用神經網絡訓練有用!!!TODO待實驗 /

實際應用遇到TimedRotatingFileHandler不滾動的問題

mat 文件的 lena mes asc over mage 執行 file 需求: 程序每天晚上8點和10點定時運行,期望日誌按日期記錄 添加Handler部分代碼如下: formatter = logging.Formatter("%(asctime)s %(

記 Python 在實際工作的第一次應用

for split 今兒接到一個任務處理上線腳本,在明確了要求之後,尋思再三,為了以後能循環使用,這次得進行腳本化才好,於是就開始了我的拙劣碼風。 畫風其實是這樣的。 有一個文件裏面有些數據,需要遍歷出每行,然後分別取到每一行的第一列的值和第二列的值,然後打印出來,這樣循環不重復才能達到效果,於是我天

記錄一次線程池的在項目實際應用,講解一下線程池的配置和參數理解。

div pro 繼續 bstr warn fin autowire string ping 前言:最近項目中與融360項目中接口對接,有反饋接口(也就是我們接收到請求,需要立即響應,並且還要有一個接口推送給他們其他計算結果),推送過程耗時、或者說兩個接口不能是同時返回,有先

P2P的 RFM模型如何實際應用

分享 alt 如何 mar 實際應用 每次 簡單的 ges 技術分享 https://www.zhihu.com/question/49439948/answer/130220645 RLMF的模型那我們再回到客戶關系裏來,做一個簡單的模型。圖表顯示了從客戶第一次購買到

在Mybatis使用連表查詢的一次實際應用

多表關聯 del 應用 行記錄 全部 業務 val 一定的 att 以前在工作中很少使用多表關聯查詢,對連表查詢的具體作用和使用場景也沒有很直觀的認識,通過這次在項目中的實際應用,對此有了一定的認識,特記錄如下。 關聯表介紹: 分別是屬性表attr_info、屬性值表a

【數據庫】Mysql主鍵的幾種表設計組合的實際應用效果

研究 開始時間 action 設計 int rand 業務主鍵 primary 同時 寫在前面 前前後後忙忙碌碌,度過了新工作的三個月。博客許久未新,似乎對忙碌沒有一點點防備。總結下來三個月不斷的磨礪自己,努力從獨樂樂轉變到眾樂樂,體會到不一樣的是,連辦公

sort()方法的排序規則與實際應用

var arr = [6,2,3,7,6,5,10] arr.sort() console.log(arr)//[10, 2, 3, 5, 6, 6, 7] //從控制檯看出,陣列會按照字元的Unicode進行排序,這並不是我們想要的結果 sort

promise和callback在微信小程式非同步呼叫應用

本部落格所有文章採用的授權方式為 自由轉載-非商用-非衍生-保持署名 ,轉載請務必註明出處,謝謝。 宣告: 本部落格歡迎轉發,但請註明出處,保留原作者資訊 部落格地址:孟阿龍的部落格 所有內容為本人學習、研究、總結。如有雷同,實屬榮幸 背景 近期,因為工作需要在研

Hibernate的延遲載入機制&&在實際應用,延遲載入與Session關閉的矛盾是如何處理的?

Hibernate的延遲載入機制&&在實際應用中,延遲載入與Session關閉的矛盾是如何處理的? 延遲載入就是並不是在讀取的時候就把資料載入進來,而是等到使用時再載入。Hibernate使用了虛擬代理機制實現延遲載入,我們使用Session的load()方法載

Java 實際應用常用的正則表示式

1.正則表示式 jdk1.4 開始提供了正則表示式的支援; java.util.regex Pattern類:此類物件如果想要獲得必須使用compile(), 此方法的功能式編譯正則 Matcher類:通過Patern類取得;2.正則標記  1.所有的正則可以使用的標記都在java.uti

資料結構的樹結構有哪些實際應用

資料結構中樹結構算是比較難,效能也相對比較好的結構了,一個平衡的樹結構,通常在查詢,修改和刪除處理上都有著極好的效率! 以連結串列為例,插入資料很簡單,就是將最後節點的next指向新節點,時間演算法為O(1)常數級,但是查詢的時候需要挨個遍歷比較,通常為O(N)級別! 而一顆平衡樹,查詢和插

C#Get和Post請求的同步及非同步方法

在C#中發起Http請求一般使用HttpWebRequest這個類,下文將使用這個HttpWebRequest物件來對Get和Post的同步及非同步請求進行封裝: 新建HttpRequestHelper類: public static class H

openAI gym 實際應用出現Attribute Error: module 'gym' has no attribute 'make'

安裝gym後我們可以看見目錄中有名為“gym”的資料夾,gym資料夾中還會有一個gym資料夾,如下圖所示 假如我們在這個目錄下python,測試import gym gym.__file__是可以成功的,但是出了這個目錄就會出現Attribute Error: module 'gym' has no a

JSPEL表示式的應用以及常用的方法

EL表示式      1、EL簡介 1)語法結構        ${expression} 2)[]與.運算子      EL 提供.和[]兩種運算子來存取資料。      當要存取的屬性名稱中包含一些特殊字元,如.或?等並非字母或數字的符號,就一定要使用 []。