摘要:意味著操作成功完成。當調用方法的時候會設置一個狀態,調用方法的時候會設置一個狀態。返回是自定義的,狀態由自己設但不能不給狀態,不然不會執行下一個鏈詳細文檔文檔
背景:在一個方法中處理一個復雜的異步操作時會涉及到多個異步處理,它們可能是層層嵌套導致這個方法異常的龐大,影響日后的代碼維護和問題的查找
解決:在ES6中提供了一個Promise的對象,它以一種鏈式的寫法將異步操作邏輯與異步返回結果的處理邏輯分離,讓代碼更加有可讀性
原理:promise提供了三種狀態,通過狀態與then函數中指定的處理函數關聯,當promise處于fullfilled狀態的時候就會調用對應處理成功的函數,處于rejected狀態的時候就會調用then提供的失敗的處理函數
相關知識
語法:new Promise( function(resolve, reject) {...} /* executor */ );
Promise中提供了一個暫時稱為executor的匿名回調函數,在創建Promise對象的時候會立即調用這個回調方法并傳遞兩個由Promise提供的接口函數resolve和reject。那么什么時候去調用這兩個函數呢? 從語義上來理解來說resolve表示異步操作成功時的處理而reject表示異步操作失敗時的處理。在這個匿名函數中我們只需要編寫異步執行的代碼邏輯而具體的異步返回的處理放到別處,這時候resolve和reject更像是兩個占位符,調用他們分別在執行成功的地方用resolve占一個位置,在失敗的地方用reject占一個位置,promise會根據各自的狀態執行各自所關聯的結果處理函數
狀態:
pending: 初始狀態,既不是成功,也不是失敗狀態。 fulfilled: 意味著操作成功完成。 rejected: 意味著操作失敗。
當調用resolve方法的時候會設置一個fulfilled狀態,調用rejected方法的時候會設置一個rejected狀態。只要promise處于這兩種狀態的一種它就會調用通過then方法添加相應處理函數,如果是pending狀態你需要先設置另外兩種中的一種才會調用對應then方法中的處理函數
鏈式:圖中所示的方法都會創建一個新的promise對象以達到鏈式調用的目的
原型方法
then方法:Promise.prototype.then(onFulfilled, onRejected)
這個then方法很有意思,它提供上面所說的異步返回結果的處理邏輯,它會將處理邏輯與promise對象的狀態關聯。從上面看有兩個on前綴的變量,它們可以是函數也可以是字符串。如果是字符串它會將上個鏈傳遞的狀態和值傳遞到下一個鏈;如果onFulfilled/onRejected)是函數,那么函數返回值可以是一個自己創建的promise對象也可以是一個字符串還可以是沒有返回值,then方法會對這些返回值做解析并返回一個新的promise(返回字符串和什么都不返回的情況,then新建的promise對象的狀態是fulfilled。返回是自定義的promise,狀態由自己設但不能不給狀態,不然不會執行下一個鏈)
詳細文檔
Promise文檔
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/95124.html
摘要:從最開始的到封裝后的都在試圖解決異步編程過程中的問題。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。異步編程入門的全稱是前端經典面試題從輸入到頁面加載發生了什么這是一篇開發的科普類文章,涉及到優化等多個方面。 TypeScript 入門教程 從 JavaScript 程序員的角度總結思考,循序漸進的理解 TypeScript。 網絡基礎知識之 HTTP 協議 詳細介紹 HTT...
摘要:首先是一個構造器函數,使用它必須通過一個實例出來,并且出來的實例暈有一個內置的參數,這個參數是一個函數,這個參數擁有自己內置的兩個參數,和,并且這兩個參數也是兩個函數異步操作成功上面這個就是一個最簡單的對象屬于的一個方法,里面的兩個參數屬于 首先promise是一個構造器函數,使用它必須通過new一個實例出來,并且new出來的實例暈有一個內置的參數,這個參數是一個函數,這個參數擁有自己...
摘要:首先是一個構造器函數,使用它必須通過一個實例出來,并且出來的實例暈有一個內置的參數,這個參數是一個函數,這個參數擁有自己內置的兩個參數,和,并且這兩個參數也是兩個函數異步操作成功上面這個就是一個最簡單的對象屬于的一個方法,里面的兩個參數屬于 首先promise是一個構造器函數,使用它必須通過new一個實例出來,并且new出來的實例暈有一個內置的參數,這個參數是一個函數,這個參數擁有自己...
摘要:上代碼異步執行成功的構造函數接收一個函數參數,并傳入兩個參數,分別表示異步操作執行成功后的回調函數和異步操作執行失敗后的回調函數。第一個回調函數是對象的狀態變為時調用,第二個回調函數是對象的狀態變為時調用。 這篇文章只解決三個問題。什么是promise? promise有什么用?promise怎么用? 1.什么是promise? 對于ES6來說,就是一個構造函數,可以用new Prom...
摘要:而且狀態一旦改變,就無法再次改變。這是因為立即的是在本輪事件循環的末尾執行,總是晚于本輪循環的同步任務。返回布爾值,表示參數字符串是否在原字符串的頭部。用于頭部補全,用于尾部補全。 9月5日 array.push(...newArray) // 往數組插入數組 // 交換a和b的值 // ES6寫法 var a = 1, b = 2; [a, b] = [b, a]; cons...
閱讀 1758·2021-09-27 14:02
閱讀 3148·2021-09-27 13:36
閱讀 1052·2019-08-30 12:46
閱讀 1841·2019-08-30 10:51
閱讀 3578·2019-08-29 17:02
閱讀 946·2019-08-29 16:38
閱讀 1853·2019-08-29 16:37
閱讀 3023·2019-08-26 10:32