1. 程式人生 > >ES6:promise物件原理詳解

ES6:promise物件原理詳解

      1. 理解
            * Promise物件:代表了未來某個將要發生的事件(通常是非同步操作)
            * 有了Promise物件可以將非同步操作以同步的流程表達出來,避免了層層巢狀的回撥函式(俗稱"回撥地獄")
            * ES6的Promise函式是一個建構函式,用來生成promise例項物件
        2.使用promise基本步驟(2步)
            * 建立Promise例項物件
                let promise = new Promise((resolve,reject) => {
                    // 初始化promise狀態為pending
                    // 執行非同步操作
                    if(非同步操作成功){
                        resolve(value);// 修改promise狀態為fullfilled
                    }else{
                        reject(errMSG);// 修改promise狀態為rejected
                    }
                })
            * 呼叫promise的then()    


                promise.then(function(){
                    result => console.log(result)
                    errorMsg => console.log(errorMsg)
                })
        3. promise物件的3個狀態
            * pending 初始化狀態
            * fullfilled 成功狀態
            * rejected 失敗狀態
        4. 應用
            * 使用promise實現超時處理
            * 使用promise封裝處理ajax請求
                let request = new XMLHttpRequest();
                request.onreadystatechange = function (){
    
                }
                request.responseType = 'json';
                request.open('GET',url);
                request.send();

​
<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
	<title>promise物件原理詳解</title>
</head>
<body>
		
</body>
<script type="text/javascript">

	// 建立promise物件(同步的)
	let promise = new Promise((resolve,reject) => {
		// 初始化promise狀態為: pending
		console.log(111)
		// 執行非同步操作,通常是傳送ajax請求,開啟定時器
		setTimeout(() => {
			console.log(333)
			// 根據非同步任務的返回結果去修改promise的狀態(原理)
			// 非同步任務成功
			resolve('哈哈 成功了!');// 自動修改promise的成功狀態: fullfilled
			// 非同步任務失敗
			reject(); // 自動修改promise的失敗狀態: rejected
		},2000)
	})
	console.log(222);// 先列印111 再222
	
	promise.then((data) => {//成功的回撥
		console.log(data, '成功了');// resolve()執行後 執行
	},(error) => {// 失敗的回撥
		console.log('失敗了');// reject()執行後 執行
	})

</script>
</html>

​

相關推薦

ES6:promise物件原理

      1. 理解             * Promise物件:代表了未來某個將要發生的事件(通常是非同步操作)             * 有了Promise物件可以將非同步操作以同步的流程表達出來,避免了層層巢狀的回撥函式(俗稱"回撥地獄")           

ES6關於Promise的用法

  Node的產生,大大推動了Javascript這門語言在服務端的發展,使得前端人員可以以很低的門檻轉向後端開發。 當然,這並不代表迸發成了全棧。全棧的技能很集中,絕不僅僅是前端會寫一些HTML和一些互動,後臺熟悉資料庫的增刪查改。    想必接觸過Node的人都知道,Node是以非同步(Async)回撥著

ES6中的Promise和Generator

[toc] # 簡介 ES6中除了上篇文章講過的語法新特性和一些新的API之外,還有兩個非常重要的新特性就是Promise和Generator,今天我們將會詳細講解一下這兩個新特性。 # Promise ## 什麼是Promise Promise 是非同步程式設計的一種解決方案,比傳統的解決方案“回

磁盤陣列 RAID 技術原理

十分 單獨 很好 不同的 raid1 miss 和數 會同 帶寬 RAID一頁通整理所有RAID技術、原理並配合相應RAID圖解,給所有存儲新人提供一個迅速學習、理解RAID技術的網上資源庫,本文將持續更新,歡迎大家補充及投稿。中國存儲網一如既往為廣大存儲界朋友提供免費、精

解決ajax跨域的方法原理之Cors方法

詳細 不同 htm 渲染 jsonp del 需要 methods href 1、神馬是跨域(Cross Domain) 對於端口和協議的不同,只能通過後臺來解決。 一句話:同一個ip、同一個網絡協議、同一個端口,三者都滿足就是同一個域,否則就是 跨域問題了。而為

Nginx+Php-fpm運行原理

pop 圖片 ron 什麽 地址 pan webserver family tid 一、代理與反向代理 現實生活中的例子 1、正向代理:訪問google.com 如上圖,因為google被墻,我們需要vpnFQ才能訪問google.com。 vpn對於“我們”來說,是可

虛擬化技術基礎原理

虛擬化技術基礎原理詳解DISK : IO調度模式 CFQ deadline anticipatory NOOP/sys/block/<device>/queue/schedulerMemory: MMU TLB vm.swappiness={0..100},使用交換分區的

常用 JavaScript 小技巧及原理

this lin slice pen global 轉化 script lis fun 善於利用JS中的小知識的利用,可以很簡潔的編寫代碼 1. 使用!!模擬Boolean()函數 原理:邏輯非操作一個數據對象時,會先將數據對象轉換為布爾值,然後取反,兩個!!重復取反,就實

es6 map()和filter()【轉】

低版本 window get 簡約 push foreach 沒有 數值 length 原文地址:http://www.zhangxinxu.com/wordpress/2013/04/es5%e6%96%b0%e5%a2%9e%e6%95%b0%e7%bb%84%e

Storm概念、原理及其應用(一)BaseStorm

when 結構 tails 並發數 vm 虛擬機 cif 異步 優勢 name 本文借鑒官文,添加了一些解釋和看法,其中有些理解,寫的比較粗糙,有問題的地方希望大家指出。寫這篇文章,是想把一些官文和資料中基礎、重點拿出來,能總結出便於大家理解的話語。與大多數“wordc

主成分分析(PCA)原理(轉載)

增加 信息 什麽 之前 repl 神奇 cto gmail 協方差 一、PCA簡介 1. 相關背景 上完陳恩紅老師的《機器學習與知識發現》和季海波老師的《矩陣代數》兩門課之後,頗有體會。最近在做主成分分析和奇異值分解方面的項目,所以記錄一下心得體會。

lvs和keeplived的工作原理

lvs+keeplived的工作原理一、lvs的工作原理 使用集群的技術和liunx的操作系統實現一個高性能、高可用的服務器。可伸縮性、可靠性、很好的管理性。 特點:可伸縮網絡服務的幾種結構,它們都需要一個前端的負載調度器(或者多個進行主從備份)。我們先分析實現虛擬網絡服務的主要技術,指出IP負載均衡技術

js中幾種實用的跨域方法原理

自身 標簽 cdc 返回 屬性和方法 插入 實用 封裝 判斷 這裏說的js跨域是指通過js在不同的域之間進行數據傳輸或通信,比如用ajax向一個不同的域請求數據,或者通過js獲取頁面中不同域的框架中(iframe)的數據。只要協議、域名、端口有任何一個不同, 都被當作是不同

http原理

tor keep 接受 地址 lru structure 格式 dns 請求方式 1. HTTP簡介 HTTP協議(HyperText Transfer Protocol,超文本傳輸協議)是用於從WWW服務器傳輸超文本到本地瀏覽器的傳送協議。它可以使瀏覽器

HTTP2.0 原理

不依賴 href 漸進 pre new 進制 四個步驟 回來 stream 影響一個網絡請求的因素主要有兩個,帶寬和延遲。今天的網絡基礎建設已經使得帶寬得到極大的提升,大部分時候都是延遲在影響響應速度。連接無法復用連接無法復用會導致每次請求都經歷三次握手和慢啟動。三次握手在

css-浮動與清除浮動的原理(清除浮動的原理你知道嗎)

alt col ges mage all strong splay height http float元素A的特點: 脫離文檔流 靠向left或right float元素會和塊盒子重疊 準確來說,是塊盒子和A重疊,但塊盒子內容會浮動在A周圍 不會和inline元素重

VMware VDS原理--20170922

vmware vds原理詳解--20170922本文純屬個人理解,如有錯誤請留言指正。上圖為vSpere中一個簡單的結構拓撲圖,借用這個拓撲圖來解釋一下為什麽VDS能夠邏輯上跨越ESXi。首先說明一下整個架構1. 在底層用三臺ESXi表示一個底層的網絡,另外用Storage代表存儲,在最左邊ESXi中的最左邊

[js高手之路] es6系列教程 - Map以及常用api

.com size style 系列教程 image clear rsquo images div ECMAScript 6中的Map類型是一種存儲著許多鍵值對的有序列表。鍵值對支持所有的數據類型. 鍵 0 和 ‘0’會被當做兩個不同的鍵,不會發生強

歸並排序原理!

elf 可能 動態空間 文件合並 you col 相同 治法 lte 無論在空間的利用上還是原理的簡介,使用空間換取時間的代價是必須的! 申請一定量的動態空間,double也是有可能!實際會有許多的問題。 時間復雜度,計算方法如下!因為每次比較都為( k*n/2 )+l*n

DPM(Deformable Part Model)原理(匯總)

特征向量 成就 算法思想 filter people tell 梯度 錨點 精度 寫在前面: DPM(Deformable Part Model),正如其名稱所述,可變形的組件模型,是一種基於組件的檢測算法,其所見即其意。該模型由大神Felzenszwalb在2008年提