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