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