最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網 會員登陸 & 注冊

ES6 Promise(1) 基本概念

2020-04-22 12:30 作者:一枚猿  | 我要投稿

概念


ES6 原生提供了 Promise 對象。


Promise是異步編程的一種解決方案,它比傳統的解決方案——回調函數和事件——更合理和更強大。


Promise其實就是一個對象,用來傳遞異步操作的消息。它代表了某個未來才會知道結果的事件(通常是一個異步操作),并且這個事件提供統一的 API,可供進一步處理。


?Promise的幾種狀態(tài)

  • pending: 初始狀態(tài),既不是成功,也不是失敗狀態(tài)。

  • fulfilled: 意味著操作成功完成。

  • rejected: 意味著操作失敗。


Promise的狀態(tài)轉變圖



瀏覽器的兼容性



Promise 對象兩個特點

1)對象的狀態(tài)不受外界影響。Promise 對象代表一個異步操作,只有異步操作的結果,可以決定當前是哪一種狀態(tài),任何其他操作都無法改變這個狀態(tài)。這也是 Promise 這個名字的由來,它的英語意思就是「承諾」,表示其他手段無法改變。


2)一旦狀態(tài)改變,就不會再變,任何時候都可以得到這個結果。Promise 對象的狀態(tài)改變,只有兩種可能:從 Pending 變?yōu)?Resolved 和從 Pending 變?yōu)?Rejected。只要這兩種情況發(fā)生,狀態(tài)就凝固了,不會再變了,會一直保持這個結果。就算改變已經發(fā)生了,你再對 Promise 對象添加回調函數,也會立即得到這個結果。這與事件(Event)完全不同,事件的特點是,如果你錯過了它,再去監(jiān)聽,是得不到結果的。



有了 Promise 對象,就可以將異步操作以同步操作的流程表達出來,避免了層層嵌套的回調函數。此外,Promise 對象提供統一的接口,使得控制異步操作更加容易。


缺點

1)無法取消 Promise,一旦新建它就會立即執(zhí)行,無法中途取消。

2)如果不設置回調函數,Promise 內部拋出的錯誤,不會反應到外部。

3)當處于 Pending 狀態(tài)時,無法得知目前進展到哪一個階段。



語法


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


executor是帶有?resolve?和?reject?兩個參數的函數?。Promise構造函數執(zhí)行時立即調用executor?函數,?resolve?和?reject?兩個函數作為參數傳遞給executor(executor 函數在Promise構造函數返回所建promise實例對象前被調用)。resolve?和?reject?函數被調用時,分別將promise的狀態(tài)改為fulfilled(完成)或rejected(失敗)。executor 內部通常會執(zhí)行一些異步操作,一旦異步操作執(zhí)行完畢(可能成功/失敗),要么調用resolve函數來將promise狀態(tài)改成fulfilled,要么調用reject?函數將promise的狀態(tài)改為rejected。如果在executor函數中拋出一個錯誤,那么該promise 狀態(tài)為rejected。executor函數的返回值被忽略。


屬性


Promise.length

????length屬性,其值總是為?1 (構造器參數的數目).

Promise.prototype

????表示?Promise?構造器的原型.

方法

Promise.all(iterable)


這個方法返回一個新的promise對象,該promise對象在iterable參數對象里所有的promise對象都成功的時候才會觸發(fā)成功,一旦有任何一個iterable里面的promise對象失敗則立即觸發(fā)該promise對象的失敗。

這個新的promise對象在觸發(fā)成功狀態(tài)以后,會把一個包含iterable里所有promise返回值的數組作為成功回調的返回值,順序跟iterable的順序保持一致;如果這個新的promise對象觸發(fā)了失敗狀態(tài),它會把iterable里第一個觸發(fā)失敗的promise對象的錯誤信息作為它的失敗錯誤信息。

Promise.all方法常被用于處理多個promise對象的狀態(tài)集合。

Promise.race(iterable)


當iterable參數里的任意一個子promise被成功或失敗后,父promise馬上也會用子promise的成功返回值或失敗詳情作為參數調用父promise綁定的相應句柄,并返回該promise對象。

Promise.reject(reason)

返回一個狀態(tài)為失敗的Promise對象,并將給定的失敗信息傳遞給對應的處理方法


Promise.resolve(value)


返回一個狀態(tài)由給定value決定的Promise對象。如果該值是thenable(即,帶有then方法的對象),返回的Promise對象的最終狀態(tài)由then方法執(zhí)行決定;否則的話(該value為空,基本類型或者不帶then方法的對象),返回的Promise對象狀態(tài)為fulfilled,并且將該value傳遞給對應的then方法。

通常而言,如果你不知道一個值是否是Promise對象,使用Promise.resolve(value) 來返回一個Promise對象,這樣就能將該value以Promise對象形式使用。


Promise 原型


01屬性


Promise.prototype.constructor


返回被創(chuàng)建的實例函數.? 默認為 Promise 函數.


方法


Promise.prototype.catch(onRejected)


添加一個拒絕(rejection) 回調到當前 promise, 返回一個新的promise。當這個回調函數被調用,新 promise 將以它的返回值來resolve,否則如果當前promise 進入fulfilled狀態(tài),則以當前promise的完成結果作為新promise的完成結果.


Promise.prototype.then(onFulfilled, onRejected)


添加解決(fulfillment)和拒絕(rejection)回調到當前 promise, 返回一個新的 promise, 將以回調的返回值來resolve.


Promise.prototype.finally(onFinally)


添加一個事件處理回調于當前promise對象,并且在原promise對象解析完畢后,返回一個新的promise對象?;卣{會在當前promise運行完畢后被調用,無論當前promise的狀態(tài)是完成(fulfilled)還是失敗(rejected)









ES6 Promise(1) 基本概念的評論 (共 條)

分享到微博請遵守國家法律
安福县| 仙桃市| 鸡西市| 唐海县| 沁阳市| 全椒县| 咸丰县| 囊谦县| 望奎县| 莱西市| 金乡县| 石首市| 汤原县| 大洼县| 卓资县| 高碑店市| 农安县| 图们市| 宁海县| 浦江县| 三明市| 海安县| 涿州市| 印江| 柯坪县| 砚山县| 莫力| 册亨县| 本溪市| 柯坪县| 吐鲁番市| 甘南县| 高雄县| 巴中市| 应城市| 盐山县| 宁晋县| 青浦区| 龙里县| 乌拉特中旗| 琼结县|