摘要:是異步編程的一種解決方案,比傳統(tǒng)的解決方案回調(diào)函數(shù)和事件更合理和更強大。履行意味著操作成功完成。如果不設(shè)置回調(diào)函數(shù),內(nèi)部拋出的錯誤,不會反應(yīng)到外部當處于狀態(tài)時,無法得知目前進展到哪一個階段剛剛開始還是即將完成。
Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強大。
什么是 Promise從使用上來說是一種語法糖,會了以后寫東西簡單一些
Promise 翻譯過來就是 承諾 諾言 約定 答應(yīng) 的意思
那么我是不是可以理解為它答應(yīng)我會去做某件事,或者約好了會做某事
注:示例代碼部分使用 jquery 示例
對象的狀態(tài)不受外界影響
promise 有三個狀態(tài):待定(pending),履行(fulfilled),拒絕(rejected)。只有返回的結(jié)果可以影響狀態(tài),其他任何操作不會影響到這個狀態(tài)。
//待定:初始狀態(tài),既未履行也未拒絕。 //履行:意味著操作成功完成。 //拒絕:意味著操作失敗。
就像約會,說好了要約會,遵守了約定,有其他原因拒絕了約定。只有約會這件事中的彼此才能決定是遵守還是拒絕,其他人是決定不了的。
狀態(tài)只會改變一次
Promise對象的狀態(tài)改變,只有兩種可能:成功(fulfilled)和失敗(rejected);只要改變了就會一直是這個結(jié)果。
還是約會,到了約會的時間之后結(jié)果就是肯定的了。別人第二天問起昨天約會去了嗎?也只會回答去了;或者沒去。是不可能說第一次回答去了,第二次回答沒去,第三次回答去了又沒去。
新建 promise 就會立即執(zhí)行,無法中途取消。
如果不設(shè)置回調(diào)函數(shù),Promise內(nèi)部拋出的錯誤,不會反應(yīng)到外部
當處于pending狀態(tài)時,無法得知目前進展到哪一個階段(剛剛開始還是即將完成)。
參數(shù)Promise有兩個參數(shù)名需要傳遞 resolve 和 reject ;分別用來返回成功和失敗,他們是兩個函數(shù),只需要最后調(diào)用一下就行,不用自己去做操作
const promise = new Promise((resolve, reject) => {//約會定在下午2點 // 為約會做準備 if (/*到時間了*/){ resolve(value);//都來了 遵守了約定 } else { reject(error);//有事來不了了 拒絕了約定 } });方法 Promise 原型方法
//原型方法使用方法 Promise.prototype.then(); //實際用的時候直接在 Promise 對象后使用方法的即可 let p = new Promise(); P.then();then() //之后
它的參數(shù)是回調(diào)函數(shù),可以有兩個
第一個必填,表示成功了會執(zhí)行的操作;第二個可以不填,表示失敗了會執(zhí)行的操作(推薦至少有一個接收錯誤的方法被調(diào)用)
const promise = new Promise((resolve, reject) => {//約會定在下午2點;新建 Promise 對象 // 為約會做準備;請求數(shù)據(jù) if (/*到時間了*/){ resolve(value);//都來了 遵守了約定;返回成功后的值 } else { reject(error);//有事來不了了 拒絕了約定;返回失敗的原因 } }); promise.then( value => { //遵守了約定,兩個人可以一起做點什么;數(shù)據(jù)操作 }, error => { //拒絕了約定,自己一個人做點什么;顯示錯誤信息或者重試 });catch() //捕獲
它的參數(shù)是一個回調(diào)函數(shù),表示失敗了會執(zhí)行的操作(推薦使用 catch() 接收錯誤)
promise.catch( error => { //顯示錯誤信息或者重試 });finally() //最后
它的參數(shù)是一個回調(diào)函數(shù),表示不管是履行了約定還是拒絕了約定 最后都會執(zhí)行的操作
promise.finally( () => { //執(zhí)行完 Promise 后執(zhí)行的操作 });Promise 對象方法
//直接使用 Promise 關(guān)鍵字就可以調(diào)用方法 Promise.all();all()
參數(shù)是 Promise 對象數(shù)組或者數(shù)組元素返回的都是 Promise 對象
當所有的 Promise 對象全都返回成功時,才會將所有成功的返回值傳遞給 then()
有一個返回失敗就會直接結(jié)束當前 Promise ,并將第一個失敗的返回值傳遞給 cath()
假如說有一系列數(shù)據(jù)要獲取這時就可以用 Promise.all()
//獲取 直接用 $.ajax() 是因為 $.ajax() 實際上返回的是 Promise 對象 Promise.all([ $.ajax({url:"api/userInfo"}), $.ajax({url:"api/banner"}), $.ajax({url:"api/imagesUrl"}) ]).then(arr=>{//全部成功才會調(diào)用 let [userInfo1,userInfo2,userInfo3] = arr; console.log(userInfo1,userInfo2,userInfo3); }).catch(err=>{//有一個失敗就終止并調(diào)用 console.log(err); });reace()
參數(shù)是 Promise 對象數(shù)組或者數(shù)組元素返回的都是 Promise 對象
只要有一個返回了狀態(tài)不論是成功或失敗都會將值傳遞給 then()
這篇文章主要是自己用來快速查閱 Promise 相關(guān)語法的,對于看文檔困難的不推薦看
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/108848.html
摘要:前端進階進階構(gòu)建項目一配置最佳實踐狀態(tài)管理之痛點分析與改良開發(fā)中所謂狀態(tài)淺析從時間旅行的烏托邦,看狀態(tài)管理的設(shè)計誤區(qū)使用更好地處理數(shù)據(jù)愛彼迎房源詳情頁中的性能優(yōu)化從零開始,在中構(gòu)建時間旅行式調(diào)試用輕松管理復雜狀態(tài)如何把業(yè)務(wù)邏輯這個故事講好和 前端進階 webpack webpack進階構(gòu)建項目(一) Webpack 4 配置最佳實踐 react Redux狀態(tài)管理之痛點、分析與...
摘要:優(yōu)點按需加載可以寫中路徑也可以動態(tài)加以后默認就是嚴格模式,默認嚴格模式完參考視頻資料經(jīng)典入門到進階 上一篇:ES6入門到進階(一):let、解構(gòu)賦值、字符串模板、函數(shù) 一、循環(huán) ES5里面新增一些東西 1.1 arr.forEach()(常用) 1. for for(let i=0; i [{t:aaaa}] let arr = [ ...
摘要:的翻譯文檔由的維護很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復雜性。 JavaScript Promise 迷你書(中文版) 超詳細介紹promise的gitbook,看完再不會promise...... 本書的目的是以目前還在制定中的ECMASc...
摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個最重要的技術(shù)點常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實現(xiàn)的大排序算法一怪對象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個最重要的技術(shù)點 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...
閱讀 1845·2021-10-13 09:39
閱讀 1397·2019-08-30 13:58
閱讀 1493·2019-08-29 16:42
閱讀 3628·2019-08-29 15:41
閱讀 3051·2019-08-29 15:11
閱讀 2671·2019-08-29 14:10
閱讀 3499·2019-08-29 13:29
閱讀 2157·2019-08-26 13:27