摘要:中就是一個構(gòu)造函數(shù)函數(shù)也是對象為什么需要多個嵌套的異步操作,如果直接用方式,會導(dǎo)致的出現(xiàn)使得異步操作更加規(guī)范,更加統(tǒng)一。的方法構(gòu)造函數(shù)構(gòu)造函數(shù)用于生成對象,函數(shù)在構(gòu)造函數(shù)執(zhí)行時同步執(zhí)行。
什么是Promise?
含以上:抽象異步操作的工具。
javascript中:Promise就是一個構(gòu)造函數(shù)(函數(shù)也是對象)
1.多個嵌套的異步操作,如果直接用callback方式,會導(dǎo)致callback hell
2.Promise的出現(xiàn)使得異步操作更加規(guī)范,API更加統(tǒng)一。
3.多個異步操作之間較復(fù)雜的關(guān)系可以簡單通過Promise處理。
fulfilled:滿足,成功
rejected:拒絕,失敗
pending:初始狀態(tài)
注:settled是指fulfilled,rejected狀態(tài)之一。
Promise( //executor function( resolve,reject){ } );
構(gòu)造函數(shù)用于生成Promise對象,executor函數(shù)在Promise構(gòu)造函數(shù)執(zhí)行時同步執(zhí)行。
resolve,reject函數(shù)被調(diào)用時分別將Promise狀態(tài)設(shè)置為fulfilled,rejected
new Promise( (resolve, reject)=>{ resolve( "resolved value" ); }); new Promise( (resolve, reject)=>{ reject( "rejected value" ); });Promise.resolve, Promise.reject
Promise還提供了全局的靜態(tài)方法用于快速生成Promise對象。
Promise.resolve生成fulfilled狀態(tài)的Promise
Promise.reject生成rejected狀態(tài)的Promise
Promise.resolve( "resolved value" ); Promise.reject( "rejected value" );Promise實例方法:then( onfulfilled, onrejected ), catch( onrejected )
then和catch用于處理Promise fullfilled成功或者rejected失敗時候的情況。
更加推薦的做法:
myPromise.then(onfulfilled).catch(onrejected);
這樣的好處:
1.then,catch區(qū)分開,分別處理成功,失敗,代碼更容易理解。
2.then().then().then().catch(); then,catch方式可以捕獲到前面多個then中的異常。
因為Promise.prototype.then方法和Promise.prototype.catch方法都返回Promise對象。所以可以鏈式調(diào)用:
myPromise.then(xxx).then(xxx);Promise.prototype.then(onfulfilled, onrejected)當中,then返回的Promise和onfulfilled,onrejected的返回值有什么聯(lián)系?
onfulfilled,onrejected的返回值 | then,catch的返回值 |
---|---|
值(常用) fulfilled Promise |
fulfilled Promise |
throw Error異常 rejected Promise |
rejected Promise |
pending Promise | pending Promise |
假設(shè)有A/B/C三個Promise
1.A執(zhí)行完才能執(zhí)行B,B執(zhí)行完才能執(zhí)行C
典型的順序執(zhí)行關(guān)系,直接使用鏈式操作:
A.then(()=>{return B}) .then(()=>{return C});
2.A/B執(zhí)行成功了才能執(zhí)行C
Promise.all([A,B]).then( ()=>{ return C; } );
3.ABC中任意一個settled即可:
Promise([A,B,C]).then(xxx).catch(xxx);
注意:第一個Promise settled之后,不會取消剩余的Promise對象的執(zhí)行。
1.Promise.resolve方法除了快速創(chuàng)建Promise以外,還能夠?qū)henable(有.then方法的對象)對象轉(zhuǎn)換為Promise。 典型的$.ajax()就會返回thenable對象。
2.then(onfulfilled, onrejected)中的onfulfilled,onrejected方法是異步調(diào)用的即時在調(diào)用Promise.prototype.then注冊Promise時,Promise已經(jīng)setteled,這2個函數(shù)也不會馬上同步執(zhí)行。Promise會以異步方式調(diào)用該回調(diào)函數(shù),這個Promise設(shè)計上的規(guī)定方針。
3.如果如果沒有注冊onrejected函數(shù),那么異常會拋出,只是捕獲不了。
4.盡量不要使用非鏈式操作Promise對象, 非鏈式操作情況下異常不會被捕獲,也不能得到then的返回值(即時then有返回值的情況)
5.使用reject而不是throw來觸發(fā)Promise失敗,因為throw的話很難區(qū)分是主動拋出的rejected還是程序執(zhí)行出錯。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/88673.html
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。寫一個符合規(guī)范并可配合使用的寫一個符合規(guī)范并可配合使用的理解的工作原理采用回調(diào)函數(shù)來處理異步編程。 JavaScript怎么使用循環(huán)代替(異步)遞歸 問題描述 在開發(fā)過程中,遇到一個需求:在系統(tǒng)初始化時通過http獲取一個第三方服務(wù)器端的列表,第三方服務(wù)器提供了一個接口,可通過...
摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調(diào)用函數(shù)返回預(yù)期結(jié)果,同樣,如果出現(xiàn)意外錯誤,則通過調(diào)用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關(guān)。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...
摘要:理解承諾有兩個部分。如果異步操作成功,則通過的創(chuàng)建者調(diào)用函數(shù)返回預(yù)期結(jié)果,同樣,如果出現(xiàn)意外錯誤,則通過調(diào)用函數(shù)傳遞錯誤具體信息。這將與理解對象密切相關(guān)。這個函數(shù)將創(chuàng)建一個,該將在到秒之間的隨機數(shù)秒后執(zhí)行或。 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇優(yōu)質(zhì)文章等著你! showImg(https://segmentfault.com/img/bVbkNvF?w=1280&h=...
摘要:對象設(shè)置初始狀態(tài)默認為等待狀態(tài)用數(shù)組來保存成功函數(shù)設(shè)置為成功狀態(tài)設(shè)置為失敗狀態(tài)調(diào)用回調(diào)函數(shù)增加方法根據(jù)狀態(tài)執(zhí)行成功失敗方法執(zhí)行成功方法執(zhí)行失敗方法將成功失敗方法保存在數(shù)組里 promise理解 promise的意思是承諾。承諾理解為某個時候一些條件滿足后,會兌現(xiàn)一件事情。 //為了方便理解我編一個小故事 //先假裝我有一個女朋友 //她承諾如果她爸媽不回來就給我就可以去幫她修電腦 否則...
閱讀 3704·2023-04-25 14:35
閱讀 3481·2021-11-15 18:00
閱讀 2907·2021-11-12 10:34
閱讀 2576·2021-11-11 16:54
閱讀 3546·2021-10-08 10:12
閱讀 2811·2021-09-06 15:02
閱讀 3384·2021-09-04 16:48
閱讀 2888·2019-08-29 14:02