gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区

站長資訊網
最全最豐富的資訊網站

實例解析ES6 Promise的原理和使用

1. Promise 之前

1.1 回調函數

回調函數:把函數A當作參數傳遞給另一個函數B調用,那么A就是回調函數。【推薦:JavaScript視頻教程】

一些例子
具名回調

function 你有幾只狗(fn){     fn('一只狗') }function 數狗(數量){     console.log(數量) } 你有幾只狗(數狗)   // 一只狗

匿名回調

function 你有幾只狗(fn){     fn('一只狗') } 你有幾只狗(function(數量){console.log(數量)  })         //  一只狗

常見的例子
jQuery中使用回調函數,這里用的是匿名回調的方式

$("#btn").click(function(){     console.log('點到我了') })

1.2 回調地獄(回調缺點1)

回調地獄:指的是回調嵌套過多的情況,導致代碼很難被看懂。

let info = []function 你有幾只狗(fn){     fn('一只狗') }function 你有幾只貓(fn){     fn('一只貓') }function 知道了(數量,callback){     info.push(數量)     console.log(info)    if(callback){         callback()     } }// 開始調用 如果比這再多幾層,就不容易看懂了你有幾只狗(function(狗數){     console.log(狗數)     知道了(狗數, function(){         你有幾只貓(function(貓數){             console.log(貓數)             知道了(貓數)         })     }) })

1.3 不使用Promise,如何解決

利用具名函數代替匿名函數

let info = []function 你有幾只狗(fn){     fn('一只狗') }function 你有幾只貓(fn){     fn('一只貓') }function 知道了(數量,callback){     info.push(數量)     console.log(info)    if(callback){         callback()     } }function 告訴你貓的個數(貓數){     console.log(貓數)     知道了(貓數) }function 繼續數(){     你有幾只貓(告訴你貓的個數) }function 告訴你狗的個數(狗數){     console.log(狗數)     知道了(狗數, 繼續數) } 你有幾只狗(告訴你狗的個數)  // 好像也沒好到哪去。。。

1.4 回調方式各不相同,需要單獨記憶(回調缺點2)

readFile('C:\1.txt',function (error, data) {   // node.js 讀取文件方法中的回調         if(error) {             console.log('成功')             console.log(data.toString())         } else {             console.log('讀取文件失敗')         }     })  $.ajax({                              // jQuery中ajax方法中的回調     url:'/2.txt'     success: function(response) {         console.log('成功')     },     error: function(){         console.log('失敗')     } })

2. Promise 的目的

Promise 是異步編程的一種解決方案,比傳統的解決方案——回調函數和事件——更合理和更強大。它由社區最早提出和實現,ES6 將其寫進了語言標準,統一了用法,原生提供了Promise對象。

3. Promise 的原理

3.1 實現原理

ES6 規定,Promise對象是一個構造函數,用來生成Promise實例。通過在函數內部return 一個 Promise對象的實例,這樣就可以使用Promise的屬性和方法進行下一步操作了。

function 函數名(){    return new Promise(function(resolve, reject) {         // ... some code          if (/* 異步操作成功 */){             resolve(value);   // 異步操作成功時調用,把結果作為參數傳遞出去           } else {             reject(error);     // 異步失敗時調用,把錯誤作為參數傳遞出去           }      }) }

3.2 調用邏輯

實例解析ES6 Promise的原理和使用
S1和E1兩個都沒有報錯,執行S2(resolve執行,系統認為搞定了,沒報錯)
S1和E1任何一個有報錯,執行E2(reject執行,系統認為沒搞定,報錯了)

4. Promise 的使用

4.1 Promise 的屬性與方法

屬性
Promise.prototype 表示 Promise 構造器的原型
方法
Promise.prototype.then()
返回一個 Promise 。它最多需要有兩個參數:Promise 的成功和失敗情況的回調函數。
Promise.prototype.catch()
返回一個Promise,并且處理拒絕的情況。等價于Promise.prototype.then(undefined, onRejected)
Promise.prototype.finally()
finally() 方法返回一個Promise,在執行then()和catch()后,都會執行finally指定的回調函數。避免同樣的語句需要在then()和catch()中各寫一次的情況。
Promise.all(iterable)
返回一個 Promise 實例,iterable參數內所有的 promise 都resolved后,才回調完成resolve。
Promise.race(iterable)
返回一個 promise ,并伴隨著 promise對象解決的返回值或拒絕的錯誤原因, 只要 iterable 中有一個 promise 對象”解決(resolve)”或”拒絕(reject)”。
Promise.resolve()
返回一個以給定值解析后的Promise對象。但如果這個值是個thenable(即帶有then方法),返回的promise會“跟隨”這個thenable的對象,采用它的最終狀態(指resolved/rejected/pending/settled);如果傳入的value本身就是promise對象,則該對象作為Promise.resolve方法的返回值返回;否則以該值為成功狀態返回promise對象。
Promise.reject()
返回一個帶有拒絕原因reason參數的Promise對象。

4.2 將回調地獄中的例子,改寫為Promise的形式

實例解析ES6 Promise的原理和使用
可以看到使用 Promise后,邏輯變得非常直觀
寫得更完整一些
實例解析ES6 Promise的原理和使用
Promise套Promise時,也就是Promise鏈的時候——注意信息的傳遞
一個失敗的例子,當我們使用Promise鏈的時候,如果每一步都需要上一步的數據時,就需要傳參,成功通過resolve傳參,失敗通過reject傳參,如果忘記傳參,就得不到想要的結果。
resolve把成功的數據返回給下一個回調
reject把失敗的數據返回給下一個回調。
實例解析ES6 Promise的原理和使用
給這里的resolve傳一個參
實例解析ES6 Promise的原理和使用
改成失敗的例子
先不給reject傳參,如果失敗的話,下一個回調拿不到數據
實例解析ES6 Promise的原理和使用
給 reject傳參
實例解析ES6 Promise的原理和使用
我們可以看到,即使是走的失敗回調,下一個成功回調還是執行了,由于 不知道() 默認返回undefined, 相當于失敗已經處理了,在成功和失敗都被處理的情況下,下一個回調會執行的。
改成符合預期的,即失敗不調用。
實例解析ES6 Promise的原理和使用
失敗不調用的簡寫形式
實例解析ES6 Promise的原理和使用
上述情況執行后 .then(除了狗呢)里面的成功回調沒有執行,我們增加一個失敗回調看看
實例解析ES6 Promise的原理和使用
同樣也可以返回 resolve,讓后面成功回調可以執行
實例解析ES6 Promise的原理和使用

4.3 應用

加載圖片
將圖片的加載寫成一個Promise,一旦加載完成,Promise的狀態就發生變化。

const preloadImage = function (path) {   return new Promise(function (resolve, reject) {     const image = new Image();     image.onload  = resolve;     image.onerror = reject;     image.src = path;   }); };

Generator 函數與 Promise 的結合(詳情見參考鏈接,阮一峰的教程)

5. 干掉Promise中的回調

5.1 await

成功的情況
實例解析ES6 Promise的原理和使用
失敗的情況
利用 try catch
實例解析ES6 Promise的原理和使用
await 配合 try catch使用,比較完整

6. 總結

能利用Promise對象,把普通函數改成返回Promise的形式,解決回調地獄的問題。
明白Promise的成功失敗調用邏輯,可以靈活的進行調整。
理解核心知識,先用起來,慢慢整合吸收知識。

贊(0)
分享到: 更多 (0)
?
網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
gmnon.cn-疯狂蹂躏欧美一区二区精品,欧美精品久久久久a,高清在线视频日韩欧美,日韩免费av一区二区
精品一区二区三区无码视频| 国产肥臀一区二区福利视频| 97公开免费视频| 国产精品无码人妻一区二区在线| 五月天av影院| 中文字幕一区二区三区四区五区人| 亚洲美女性囗交| 97超碰成人在线| 日本免费在线视频观看| 91免费视频污| 真人做人试看60分钟免费| 成年人黄色在线观看| 女同性恋一区二区| 欧美一级特黄aaaaaa在线看片| 1314成人网| 91视频 - 88av| 免费av观看网址| 已婚少妇美妙人妻系列| 亚洲人视频在线| 黄色一级视频播放| 黄色av网址在线播放| heyzo亚洲| 欧美精品性生活| 波多野结衣免费观看| 成品人视频ww入口| 一本久道中文无码字幕av| 亚洲精品自拍网| 亚洲一区 在线播放| 激情伊人五月天| 三上悠亚av一区二区三区| 97在线免费视频观看| 九色在线视频观看| 手机在线免费毛片| 成人免费aaa| 国产福利精品一区二区三区| 69精品丰满人妻无码视频a片| 欧美在线一区视频| 国内av一区二区| 日韩中文字幕三区| 中文国产在线观看| 免费裸体美女网站| 日韩中文字幕亚洲精品欧美| 日韩免费高清在线| 国产av人人夜夜澡人人爽麻豆| 手机在线看福利| 大肉大捧一进一出好爽视频| 亚洲最新免费视频| 丰满少妇在线观看| 国产a级片网站| 乱子伦一区二区| 欧美男女交配视频| 欧美日韩黄色一级片| 国产日韩欧美大片| 九九热精品国产| 午夜dv内射一区二区| 91好吊色国产欧美日韩在线| 一级全黄肉体裸体全过程| 天天操天天爱天天爽| aⅴ在线免费观看| 国产人妻777人伦精品hd| 奇米视频7777| 免费看涩涩视频| 国产区二区三区| 搡女人真爽免费午夜网站| 少妇无码av无码专区在线观看 | 国产av第一区| 日本黄色福利视频| 国产三级三级三级看三级| 欧美精品久久久久久久自慰| 国产卡一卡二在线| 老司机午夜网站| 日韩精品一区二区三区电影| 交换做爰国语对白| 男女啪啪的视频| 男女日批视频在线观看| 岛国大片在线播放| 免费 成 人 黄 色| 日本韩国欧美在线观看| av免费观看网| 在线观看高清免费视频| 9久久婷婷国产综合精品性色| 少妇黄色一级片| 亚洲av毛片在线观看| 欧美在线观看黄| 波多野结衣家庭教师在线播放| 国产成人久久婷婷精品流白浆| 免费日韩视频在线观看| 亚洲视频在线观看一区二区三区| 超碰超碰在线观看| 91视频福利网| 老太脱裤让老头玩ⅹxxxx| 日韩av三级在线| 国产成人无码av在线播放dvd| 杨幂毛片午夜性生毛片| 中国一级大黄大黄大色毛片| 国产玉足脚交久久欧美| 丝袜制服一区二区三区| 在线观看成人免费| www黄色在线| 超碰97在线看| 黄色三级视频在线| 轻点好疼好大好爽视频| 色婷婷狠狠18| 国产www免费| 日韩av一卡二卡三卡| 国产成a人亚洲精v品在线观看| 日韩精品无码一区二区三区免费| 日本xxx免费| 91热这里只有精品| 18禁裸男晨勃露j毛免费观看| 最近免费中文字幕中文高清百度| 欧美国产日韩在线视频| 六月婷婷在线视频| 免费成人进口网站| 天天天干夜夜夜操| 777久久久精品一区二区三区 | 日本中文字幕片| 国产四区在线观看| 黄色高清无遮挡| 黄色a级片免费看| 国产xxxxhd| 欧美伦理片在线观看| 免费欧美一级视频| 国产精品成人久久电影| 超碰超碰超碰超碰超碰| 欧美午夜精品理论片| 人人干人人视频| 欧美在线观看视频网站| 缅甸午夜性猛交xxxx| 国产精品日韩三级| 亚洲自拍偷拍一区二区三区| 三级性生活视频| 日本高清免费在线视频| 夜夜夜夜夜夜操| 国产成人在线综合| 亚洲天堂av一区二区三区| 成年网站免费在线观看| 亚洲一区日韩精品| 日韩欧美中文在线视频| 欧美特黄aaa| 欧美日韩久久婷婷| 深夜做爰性大片蜜桃| 成人在线免费观看网址| 狠狠噜天天噜日日噜| 欧美黑人在线观看| 男女猛烈激情xx00免费视频| 丰满的少妇愉情hd高清果冻传媒 | 超碰在线免费av| 色噜噜狠狠一区二区三区狼国成人| 五月天视频在线观看| 久久久国产精华液999999 | 99热一区二区三区| 男人的天堂狠狠干| 国产91在线亚洲| 国产在线观看欧美| 一级黄色高清视频| 日本男女交配视频| 欧日韩免费视频| 黑人糟蹋人妻hd中文字幕| 91看片就是不一样| 九九热免费在线观看| 在线观看av的网址| 国产成人精品视频免费看| 国产91对白刺激露脸在线观看| 男女爽爽爽视频| 大片在线观看网站免费收看| 免费成人午夜视频| 狠狠操狠狠干视频| 日本香蕉视频在线观看| 欧美xxxxx在线视频| 999热精品视频| 成人黄色片视频| 浴室偷拍美女洗澡456在线| 丰满人妻中伦妇伦精品app| 久久久久久久久久久久久久久国产| 黄色a级片免费看| 中文字幕日韩综合| 亚洲午夜精品久久久久久人妖| 超碰91在线播放| 久久99999| heyzo亚洲| 免费在线观看视频a| 黄色网址在线免费看| 无人在线观看的免费高清视频| 青草全福视在线| 欧美一级视频在线| 99热手机在线| 少妇人妻互换不带套| 黄色国产一级视频| 免费人成自慰网站| 五月天婷婷影视| 国产福利影院在线观看| 黄色片一级视频| 国产91在线视频观看| 久久久久久www| 国产午夜伦鲁鲁| 成人毛片一区二区| 99视频在线免费播放| av在线播放亚洲| 国产精品自拍片|