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