成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

[ ES6 ] 進(jìn)階篇(一) —— Promise

Charlie_Jade / 2120人閱讀

摘要:是異步編程的一種解決方案,比傳統(tǒng)的解決方案回調(diào)函數(shù)和事件更合理和更強(qiáng)大。履行意味著操作成功完成。如果不設(shè)置回調(diào)函數(shù),內(nèi)部拋出的錯(cuò)誤,不會(huì)反應(yīng)到外部當(dāng)處于狀態(tài)時(shí),無法得知目前進(jìn)展到哪一個(gè)階段剛剛開始還是即將完成。

Promise 是異步編程的一種解決方案,比傳統(tǒng)的解決方案——回調(diào)函數(shù)和事件——更合理和更強(qiáng)大。

什么是 Promise

從使用上來說是一種語法糖,會(huì)了以后寫東西簡單一些
Promise 翻譯過來就是 承諾 諾言 約定 答應(yīng) 的意思
那么我是不是可以理解為它答應(yīng)我會(huì)去做某件事,或者約好了會(huì)做某事
注:示例代碼部分使用 jquery 示例

特點(diǎn)

對(duì)象的狀態(tài)不受外界影響

promise 有三個(gè)狀態(tài):待定(pending),履行(fulfilled),拒絕(rejected)。只有返回的結(jié)果可以影響狀態(tài),其他任何操作不會(huì)影響到這個(gè)狀態(tài)。

//待定:初始狀態(tài),既未履行也未拒絕。
//履行:意味著操作成功完成。
//拒絕:意味著操作失敗。

就像約會(huì),說好了要約會(huì),遵守了約定,有其他原因拒絕了約定。只有約會(huì)這件事中的彼此才能決定是遵守還是拒絕,其他人是決定不了的。

狀態(tài)只會(huì)改變一次

Promise對(duì)象的狀態(tài)改變,只有兩種可能:成功(fulfilled)和失敗(rejected);只要改變了就會(huì)一直是這個(gè)結(jié)果。

還是約會(huì),到了約會(huì)的時(shí)間之后結(jié)果就是肯定的了。別人第二天問起昨天約會(huì)去了嗎?也只會(huì)回答去了;或者沒去。是不可能說第一次回答去了,第二次回答沒去,第三次回答去了又沒去。

新建 promise 就會(huì)立即執(zhí)行,無法中途取消。

如果不設(shè)置回調(diào)函數(shù),Promise內(nèi)部拋出的錯(cuò)誤,不會(huì)反應(yīng)到外部

當(dāng)處于pending狀態(tài)時(shí),無法得知目前進(jìn)展到哪一個(gè)階段(剛剛開始還是即將完成)。

參數(shù)

Promise有兩個(gè)參數(shù)名需要傳遞 resolve 和 reject ;分別用來返回成功和失敗,他們是兩個(gè)函數(shù),只需要最后調(diào)用一下就行,不用自己去做操作

const promise = new Promise((resolve, reject) => {//約會(huì)定在下午2點(diǎn)
  // 為約會(huì)做準(zhǔn)備

  if (/*到時(shí)間了*/){
    resolve(value);//都來了 遵守了約定
  } else {
    reject(error);//有事來不了了 拒絕了約定
  }
});
方法 Promise 原型方法
//原型方法使用方法
Promise.prototype.then();
//實(shí)際用的時(shí)候直接在 Promise 對(duì)象后使用方法的即可
let p = new Promise();
P.then();
then() //之后

它的參數(shù)是回調(diào)函數(shù),可以有兩個(gè)
第一個(gè)必填,表示成功了會(huì)執(zhí)行的操作;第二個(gè)可以不填,表示失敗了會(huì)執(zhí)行的操作(推薦至少有一個(gè)接收錯(cuò)誤的方法被調(diào)用)

const promise = new Promise((resolve, reject) => {//約會(huì)定在下午2點(diǎn);新建 Promise 對(duì)象
  // 為約會(huì)做準(zhǔn)備;請(qǐng)求數(shù)據(jù)

  if (/*到時(shí)間了*/){
    resolve(value);//都來了 遵守了約定;返回成功后的值
  } else {
    reject(error);//有事來不了了 拒絕了約定;返回失敗的原因
  }
});
promise.then( value => {
  //遵守了約定,兩個(gè)人可以一起做點(diǎn)什么;數(shù)據(jù)操作
}, error => {
  //拒絕了約定,自己一個(gè)人做點(diǎn)什么;顯示錯(cuò)誤信息或者重試
});
catch() //捕獲

它的參數(shù)是一個(gè)回調(diào)函數(shù),表示失敗了會(huì)執(zhí)行的操作(推薦使用 catch() 接收錯(cuò)誤)

promise.catch( error => {
  //顯示錯(cuò)誤信息或者重試
});
finally() //最后

它的參數(shù)是一個(gè)回調(diào)函數(shù),表示不管是履行了約定還是拒絕了約定 最后都會(huì)執(zhí)行的操作

promise.finally( () => {
  //執(zhí)行完 Promise 后執(zhí)行的操作
});
Promise 對(duì)象方法
//直接使用 Promise 關(guān)鍵字就可以調(diào)用方法
Promise.all();
all()

參數(shù)是 Promise 對(duì)象數(shù)組或者數(shù)組元素返回的都是 Promise 對(duì)象
當(dāng)所有的 Promise 對(duì)象全都返回成功時(shí),才會(huì)將所有成功的返回值傳遞給 then()
有一個(gè)返回失敗就會(huì)直接結(jié)束當(dāng)前 Promise ,并將第一個(gè)失敗的返回值傳遞給 cath()

假如說有一系列數(shù)據(jù)要獲取這時(shí)就可以用 Promise.all()

//獲取 直接用 $.ajax() 是因?yàn)?$.ajax() 實(shí)際上返回的是 Promise 對(duì)象
Promise.all([
    $.ajax({url:"api/userInfo"}),
    $.ajax({url:"api/banner"}),
    $.ajax({url:"api/imagesUrl"})
]).then(arr=>{//全部成功才會(huì)調(diào)用
    let [userInfo1,userInfo2,userInfo3] = arr;
    console.log(userInfo1,userInfo2,userInfo3);
}).catch(err=>{//有一個(gè)失敗就終止并調(diào)用
    console.log(err);
});
reace()

參數(shù)是 Promise 對(duì)象數(shù)組或者數(shù)組元素返回的都是 Promise 對(duì)象
只要有一個(gè)返回了狀態(tài)不論是成功或失敗都會(huì)將值傳遞給 then()

這篇文章主要是自己用來快速查閱 Promise 相關(guān)語法的,對(duì)于看文檔困難的不推薦看

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/108848.html

相關(guān)文章

  • 前端進(jìn)階資源整理

    摘要:前端進(jìn)階進(jìn)階構(gòu)建項(xiàng)目一配置最佳實(shí)踐狀態(tài)管理之痛點(diǎn)分析與改良開發(fā)中所謂狀態(tài)淺析從時(shí)間旅行的烏托邦,看狀態(tài)管理的設(shè)計(jì)誤區(qū)使用更好地處理數(shù)據(jù)愛彼迎房源詳情頁中的性能優(yōu)化從零開始,在中構(gòu)建時(shí)間旅行式調(diào)試用輕松管理復(fù)雜狀態(tài)如何把業(yè)務(wù)邏輯這個(gè)故事講好和 前端進(jìn)階 webpack webpack進(jìn)階構(gòu)建項(xiàng)目(一) Webpack 4 配置最佳實(shí)踐 react Redux狀態(tài)管理之痛點(diǎn)、分析與...

    BlackMass 評(píng)論0 收藏0
  • ES6入門到進(jìn)階(二):循環(huán)、數(shù)組、對(duì)象

    摘要:優(yōu)點(diǎn)按需加載可以寫中路徑也可以動(dòng)態(tài)加以后默認(rèn)就是嚴(yán)格模式,默認(rèn)嚴(yán)格模式完參考視頻資料經(jīng)典入門到進(jìn)階 上一篇:ES6入門到進(jìn)階(一):let、解構(gòu)賦值、字符串模板、函數(shù) 一、循環(huán) ES5里面新增一些東西 1.1 arr.forEach()(常用) 1. for for(let i=0; i [{t:aaaa}] let arr = [ ...

    JerryZou 評(píng)論0 收藏0
  • ES6-7

    摘要:的翻譯文檔由的維護(hù)很多人說,阮老師已經(jīng)有一本關(guān)于的書了入門,覺得看看這本書就足夠了。前端的異步解決方案之和異步編程模式在前端開發(fā)過程中,顯得越來越重要。為了讓編程更美好,我們就需要引入來降低異步編程的復(fù)雜性。 JavaScript Promise 迷你書(中文版) 超詳細(xì)介紹promise的gitbook,看完再不會(huì)promise...... 本書的目的是以目前還在制定中的ECMASc...

    mudiyouyou 評(píng)論0 收藏0
  • 前端進(jìn)階系列-目錄

    摘要:然而在最近的面試中通過學(xué)習(xí)和思考,找到了前進(jìn)的方向,也得到一些大公司的錄用機(jī)會(huì)。算是從初級(jí)前端畢業(yè),進(jìn)階了吧。在這里先寫個(gè)目錄。趕時(shí)間的同學(xué)可以按照我的目錄先自行準(zhǔn)備提升,希望推薦文章和交流。 背景 之前我分享了文章大廠前端面試考什么?,你們一定很想看答案吧?說實(shí)話,答案我是有,在準(zhǔn)備面試的時(shí)候會(huì)時(shí)不時(shí)翻看,但內(nèi)容比較多,比較凌亂,不能指望我在一篇文章中寫完。 我是從非計(jì)算機(jī)專業(yè)自學(xué)前...

    cod7ce 評(píng)論0 收藏0
  • 前端文檔收集

    摘要:系列種優(yōu)化頁面加載速度的方法隨筆分類中個(gè)最重要的技術(shù)點(diǎn)常用整理網(wǎng)頁性能管理詳解離線緩存簡介系列編寫高性能有趣的原生數(shù)組函數(shù)數(shù)據(jù)訪問性能優(yōu)化方案實(shí)現(xiàn)的大排序算法一怪對(duì)象常用方法函數(shù)收集數(shù)組的操作面向?qū)ο蠛驮屠^承中關(guān)鍵詞的優(yōu)雅解釋淺談系列 H5系列 10種優(yōu)化頁面加載速度的方法 隨筆分類 - HTML5 HTML5中40個(gè)最重要的技術(shù)點(diǎn) 常用meta整理 網(wǎng)頁性能管理詳解 HTML5 ...

    jsbintask 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

Charlie_Jade

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<