摘要:概述是異步編程的一種解決方案,很好的解決了傳統(tǒng)異步編程中的回調(diào)地獄問題。語法中闡述,有三種狀態(tài),分別是進(jìn)行中已完成已失敗。方法使用要使用方法我們首先要?jiǎng)?chuàng)建實(shí)例,也就是說我們要一個(gè)對象。
1. Promise概述
promise是異步編程的一種解決方案,很好的解決了傳統(tǒng)異步編程中的回調(diào)地獄問題。同時(shí)我們可以把promise可以理解為一個(gè)容器,這個(gè)容器里面存放著一些未來才會(huì)結(jié)束的事件(通常都是一些異步操作)。
在es6語法中,Promise是一個(gè)構(gòu)造函數(shù),用來生成Promise實(shí)例。語法中闡述,Promise有三種狀態(tài),分別是Pending(進(jìn)行中)、Resolved(已完成)、Rejected(已失敗)。Promise的狀態(tài)只有兩種可能,1、Pending->Resolved
2、Pending->Rejected 。以上兩種情況是互斥的,也就是說只要從Pending狀態(tài)變成Resolved狀態(tài),這個(gè)狀態(tài)就會(huì)凝固。就不會(huì)再從Pending狀態(tài)變成Rejected狀態(tài)
2. Promise構(gòu)造函數(shù)解析Promise構(gòu)造函數(shù)接受一個(gè)函數(shù)作為參數(shù),這個(gè)函數(shù)有兩個(gè)參數(shù),分別是resolve和reject。這兩個(gè)參數(shù)是兩個(gè)函數(shù),由Javascript引擎提供,不用自己部署。
下面我們就舉例說明,
var p = new Promise(function(resolve, reject){ //開始異步操作 setTimeout(function(){ console.log("異步操作完成"); /* if(true){ resolve("異步操作成功調(diào)用我"); }else{ reject("異步操作失敗調(diào)用我"); } */ }, 2000); });3. Promise方法解析
通過上圖我們可以看到Promise本身有all、race、reject、resolve等方法,原型上面有then、catch等方法。
1)、then()方法使用
要使用then()方法我們首先要?jiǎng)?chuàng)建Promise實(shí)例,也就是說我們要new一個(gè)Promise對象。在我們實(shí)際的開發(fā)中都是把這個(gè)過程封裝到一個(gè)函數(shù)中,在函數(shù)中返回一個(gè)Promise實(shí)例。如下實(shí)例, function runAsync(){ var p = new Promise(function(resolve, reject){ //異步操作開始 setTimeout(function(){ console.log("異步操作完成"); resolve("異步操作成功調(diào)用我"); /* if(true){ resolve("異步操作成功調(diào)用我"); }else{ reject("異步操作失敗調(diào)用我"); } */ }, 2000); }); return p; } runAsync() Promise實(shí)例生成以后,就可以用then方法分別指定Resolved狀態(tài)和Reject狀態(tài)的回調(diào)函數(shù)。如下, runAsync().then( function (data){ console.log(data); })
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/93534.html
摘要:模塊化,就是字面意思的模塊化。比如模塊化一個(gè)表單驗(yàn)證,模塊化一個(gè)輪播圖等。但是這樣的編寫還存在一個(gè)問題,對象中的函數(shù)或者屬性對外部是可見的,并且是可修改的。 模塊化,就是字面意思的模塊化。比如模塊化一個(gè)表單驗(yàn)證,模塊化一個(gè)輪播圖等。 在平常 JavaScript 代碼的編寫中,我們一般是保持著這樣一個(gè)順序。 1. 無腦式自然編寫 function a() { alert(a) } ...
摘要:主題大綱淺述采樣與端到端何為何為端到端何為采樣的做法與弊端嘉賓介紹高馳濤,官方開發(fā)組成員,作者,云智慧高級(jí)架構(gòu)師。 極牛技術(shù)實(shí)踐分享活動(dòng) 極牛技術(shù)實(shí)踐分享系列活動(dòng)是極牛聯(lián)合頂級(jí)VC、技術(shù)專家,為企業(yè)、技術(shù)人提供的一種系統(tǒng)的線上技術(shù)分享活動(dòng)。 每期不同的技術(shù)主題,和行業(yè)專家深度探討,專注解決技術(shù)實(shí)踐難點(diǎn),推動(dòng)技術(shù)創(chuàng)新,每兩周的周三20點(diǎn)正式開課。歡迎各個(gè)機(jī)構(gòu)、企業(yè)、行業(yè)專家、技術(shù)人...
前言 今天就簡單總結(jié)一下promise的用法,在用promise之前,我們要先了解一下什么promise,這個(gè)東西是用來干什么的? 通俗易懂的講,promise其實(shí)就是一個(gè)構(gòu)造函數(shù),是用來解決異步操作的,我們平時(shí)其實(shí)還是會(huì)用到挺多的,比如我們經(jīng)常會(huì)嵌套一層層的函數(shù) step1(function (value1) { step2(value1, function(value2){ s...
摘要:入門之基本用法背景在我們使用異步函數(shù)比如進(jìn)行編寫代碼,如果我們需要很多個(gè)請求不同的接口,而下一個(gè)接口需要依賴上一個(gè)接口的返回值,這樣,我們的代碼則需要在各種回調(diào)函數(shù)中嵌套,這樣一層一層地下去,就形成了回調(diào)地獄。 Promise入門之基本用法 背景 在我們使用異步函數(shù)比如ajax進(jìn)行編寫代碼,如果我們需要很多個(gè)ajax請求不同的接口,而下一個(gè)接口需要依賴上一個(gè)接口的返回值,這樣,我們的代...
摘要:和塊級(jí)作用域?qū)嶋H上為新增了塊級(jí)作用域。這表示外層代碼塊不受內(nèi)層代碼塊的影響。塊級(jí)作用域的出現(xiàn),實(shí)際上使得獲得廣泛應(yīng)用的立即執(zhí)行函數(shù)表達(dá)式不再必要了。其他騷氣方法參考阮老師并發(fā)模型與事件循環(huán) 沒有錯(cuò),這道題就是: for (var i = 0; i< 10; i++){ setTimeout(() => { console.log(i); }, 1000...
閱讀 2548·2021-10-19 11:45
閱讀 2544·2021-09-30 09:56
閱讀 1523·2021-09-30 09:47
閱讀 650·2019-08-30 15:53
閱讀 1888·2019-08-30 15:44
閱讀 628·2019-08-30 12:52
閱讀 1143·2019-08-30 11:16
閱讀 1672·2019-08-29 16:36