1. 程式人生 > >ES6---new Promise()講解,Promise物件是用來幹嘛的?

ES6---new Promise()講解,Promise物件是用來幹嘛的?

具體介紹
語法:

new Promise(function(resolve,reject){...}/*executor*/);

Promise建構函式執行時立即呼叫executor函式,resolve和reject兩個函式作為引數傳遞給executor(executor函式在Promise建構函式返回新建物件前被呼叫)。resolve和reject函式被呼叫時,分別將Promise狀態改為fulfilled和rejected。

Promise有各種開源實現,在ES6中被統一規範,由瀏覽器直接支援。

function test(resolve,reject){//這兩個引數都是函式
  var timeOut=Math.random()*2;//生成0-2之間的隨機數
  log('set timeout to:'+timeOut+' seconds.');
  setTimeout(function(){
   if(timeOut<1){//如果小於1,則等待一段時間後返回成功
     log('call resolve()...');
     resolve('200 OK);
    }
    else{//否則返回失敗
      log('call reject()...');
      reject('timeout in '+timeOut+' seconds.');
     }
    },timeOut*1000);
}

可以看出,test()只關心自身的邏輯,並不關心具體的resolve和reject如何處理結果。有了執行函式,就可以用一個Promise物件來執行它,並在將來某個時刻獲得成功或失敗的結果。

var p1=new Promise(test);//變數p1是一個Promise物件,負責執行test函式,由於test函式內部是非同步執行的
var p2=p1.then(function(result){
  console.log('成功:'+result);
});//test函式執行成功
var p3=p2.catch(function(reason){
  console.log('失敗:'+reason);
});//test函式執行失敗
Promise物件可以串聯起來:

new Promise(test).then(function(result){
  console.log('成功:'+result);
}).catch(function(reason){
  console.log('失敗:'+reason);
});

Promise最大的好處是在非同步執行的流程中,把執行程式碼和處理結果的程式碼清晰的分離了。例如有若干個非同步任務:

job1.then(job2).then(job3).catch(handleError);//job1,job2,job3都是Promise物件

相關推薦

ES6---new Promise()講解Promise物件的?

具體介紹 語法: new Promise(function(resolve,reject){...}/*executor*/); Promise建構函式執行時立即呼叫executor函式,resolve和reject兩個函式作為引數傳遞給executor(ex

VC/C++、HTML、Java、SQL、JSP、SSH、SSM等等的英語單詞(看了很多遍都會忘記意思或讀音只知道大概的)

C++、HTML、Java、SQL、JSP、SSH、SSM等等學習過程中遇到的英語單詞(看了很多遍都會忘記意思或讀音,只知道大概用來幹嘛的) 在這裡記錄下來,方便檢視(有道詞典的死粉),順序A~Z(首字母大寫的單詞也是)【我找到的"程式設計開發常用的英語單詞"文章分享給大家

photoshopcs6破解補丁

file ref div adobe 選擇 系統 ofo photo gpo photoshopcs6破解補丁為 Adobe CS6 系列軟件通用破解補丁,親測可用,終於能用了不再出現那個煩人的購買頁面了,cs6破解補丁解壓後得到32和64兩個文件夾,根據自己的系統類型選擇

dubbo裡面的GenericService

兩種: 提供者想省事或者消費者想省事 比如提供者想省事,雖然提供了10個方法,但是不想在接口裡面寫十個方法,也就不用給這十個方法做函式宣告、引數聲明瞭。直接通過: ServiceConfig<GenericService> service = new ServiceConfig<

Mybatis框架中SqlSessionFactory這個類是的?

首先SqlSessionFactory與SqlSession都是同一個介面 SqlSessionFactory是通過SqlSessionFactoryBuilder的build方法建立的 而build方法建立的是一個SqlSessionFactory的實現類,叫DefaultSqlS

捕獲promise異常不能onerror

最近在用axios在vue裡做非同步請求,遇到了難題,我在axios裡丟擲異常後,想在一個地方統一捕獲異常,不想用catch方法,因為用catch的話,每個方法後面都要加,而我想要做的是把出現的異常都用彈窗的形式彈出來。 於是開始用 window.onerror = function(

placement new還是不要亂的好如果是處理陣列記得多申請4個位元組

首先是得手動掉解構函式,在釋放原指標,操作起來很煩嗎,忘了析構是常事 其次一點,當對陣列調placement new的時候會需要多用掉4個位元組用來儲存陣列個數 而如果忽略了這一點 申請記憶體的時候用的 operater new(sizeof(Class) * 10) 然後

MD5 和的價值體現在哪裏它是做什麽的?

是否 什麽 使用 pos HA products 互聯網 con www MD5 和的價值體現在哪裏,它是用來做什麽的? MD5 和是由字母和數字構成的字符串,起到了文件指紋的作用。如果兩個文件有相同的 MD5 和值,那麽,文件完全相同。您可以為每一軟件下載使用所提供的 M

SDP(13): Scala.Future - far from completion絕不能做甩手掌櫃

atm 軟件 listen async execute gpo eve 並且 pri 在前面幾篇關於數據庫引擎的討論裏很多的運算函數都返回了scala.Future類型的結果,因為我以為這樣就可以很方便的實現了non-blocking效果。無論任何復雜的數據處理操作,只

Python那麽火到底能做什麽?我們說說Python3的主要應用

htm 51cto atp 出現 instagram 希望 pytho b2c 代碼塊 如果您正在考慮學習Python,或者您最近剛開始學習, 您可能會問自己:“我到底可以用Python做什麽?” 這是個棘手的問題,因為Python有很多用途。 但是隨著時間的推移, 我發現

相信機遇只能改變環境努力是改變自己的。

前言: 這段時間沒事的時候都在看園子裡的部落格或者微信訂閱號裡的文章,不是看什麼技術文件,而是看看這些計算機前輩們的心靈雞湯。最近有些焦慮,可能是因為大三即將畢業,考慮升本還是工作問題,考慮自己所學是否能所用的問題,考慮個人能力問題以及私人的問題。寫這篇部落格只是為了記錄一下即將畢業的我的想法,以免以後對現在

Python那麼火到底可以做什麼?

如果您正在考慮學習Python,或者您最近剛開始學習,您可能會問自己:“我到底可以用Python做什麼?”這是個棘手的問題,因為Python有很多用途。但是隨著時間的推移,我發現Python主要可用於一下三個方面: 如果您正在考慮學習Python,或者您最近剛開始學習,您可

給你一臺大疆無人機你能做點啥?(三)------傾斜攝影建模基礎

        在做正射影像或者傾斜建模過程中會涉及到一些攝影測量和傾斜建模有關一些知識,順便查了一些資料,然後覺得很有必要,就稍微系統羅列了一下,在最後還提供了幾個建模航線為大家作為參考,希望對大家有幫助。 一、重疊度、航線彎曲、像片旋角。 1.1航向重疊率  

給你一臺大疆無人機你能做點啥?(二)-----——傾斜攝影建模

上一期我們寫了一篇關於如何用大疆輕小型無人機制作正射影像。這一期講解如何利用大疆輕小型無人機進行傾斜攝影建模。 一、   採集資料 地面站用Altizure 這個app,很方便的!強烈推薦。 規劃採集資料區域 設定重疊率和鏡頭傾斜角度以及飛行速度 航線分東、南

phpLDAPadmin 安裝配置講解通過 Web 端管理您的 LDAP 伺服器

做企業應用的也不時要與 LDAP 打交道的,例如組織架構、人員的管理,許可權的分級控制等。以前管理 LDAP 都是用客戶端工具 LDAP Browser 什麼的,有時不甚方便。幸運的是,網上有一個現成的、功能完備的 LDAP Web 管理工具,那就是赫赫有名的 phpMyAd

萬能的Python還能製作高大上的進度條?

開發十年,就只剩下這套架構體系了! >>>   

JVM中有哪些記憶體區域分別是幹什麼的

前言 之前我們探討過一個.class檔案是如何被載入到jvm中的。但是jvm內又是如何劃分記憶體的呢?這個內被載入到了那一塊記憶體中?jvm記憶體劃分也是面試當中必被問到的一個面試題。 什麼是jvm記憶體區域劃分? 其實這個問題非常簡單,JVM在執行我們寫好的程式碼時,他是必須使用多塊記憶體空間的,不同的記憶

gulp是什麽的?(概念)

blank 頭部 ins get keyword pro lin 分鐘 校驗 當我們在使用gulp的時候,gulp到底用來幹什麽呢? 編譯 sass 合並優化壓縮 css 校驗壓縮 js 優化圖片 添加文件指紋(md5) 組件化頭部底部(include html) 實

Zookeeper什麽?

集中 進出 有一種 安裝配置 讀取配置 分配 main 應用 個數 在Zookeeper的官網上有這麽一句話:ZooKeeper is a centralized service for maintaining configuration information, na

賣掉親生“百度音樂”注資“網易雲音樂”百度到底要

近日,網易雲音樂達成新一輪融資,投資方包括百度、泛大西洋投資集團等,訊息一出即刻引起坊間熱議,可以說百度又下了一步好棋。 放眼國內,網際網路音樂市場已呈現"四國鼎立"騰訊音樂、網易雲音樂、太合音樂以及阿里的蝦米音樂。 在版權大戰持續3年後,這次百度與網易雲