中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

淺析Javascript ES6中的原生Promise
來源:易賢網 閱讀:1703 次 日期:2016-08-30 14:27:25
溫馨提示:易賢網小編為您整理了“淺析Javascript ES6中的原生Promise”,方便廣大網友查閱!

前言

一個 Promise 對象可以理解為一次將要執行的操作(常常被用于異步操作),使用了 Promise 對象之后可以用一種鏈式調用的方式來組織代碼,讓代碼更加直觀。而且由于 Promise.all 這樣的方法存在,可以讓同時執行多個操作變得簡單。

Promise的興起,是因為異步方法調用中,往往會出現回調函數一環扣一環的情況。這種情況導致了回調金字塔問題的出現。不僅代碼寫起來費勁又不美觀,而且問題復雜的時候,閱讀代碼的人也難以理解。 

舉例如下:

db.save(data, function(data){

 // do something...

 db.save(data1, function(data){

 // do something...

 db.save(data2, function(data){

  // do something...

  done(data3); // 返回數據

 })

 });

});

假設有一個數據庫保存操作,一次請求需要在三個表中保存三次數據。那么我們的代碼就跟上面的代碼相似了。這時候假設在第二個db.save出了問題怎么辦?基于這個考慮,我們又需要在每一層回調中使用類似try...catch這樣的邏輯。這個就是萬惡的來源,也是node剛開始廣為詬病的一點。

另外一個缺點就是,假設我們的三次保存之間并沒有前后依賴關系,我們仍然需要等待前面的函數執行完畢, 才能執行下一步,而無法三個保存并行,之后返回一個三個保存過后需要的結果。(或者說實現起來需要技巧)

不幸的是,在我剛開始接觸node的時候,我寫了大量這樣的hell。

后來因為還是寫前端代碼多一些,我接觸了ES6,發現了一個解決回調深淵的利器Promise。

其實早在ES6的Promise之前,Q,when.js,bluebird等等庫早就根據Promise標準(參考Promise/A+)造出了自己的promise輪子。 

(看過一篇文章,我覺得很有道理。里面說,不要擴展內置的原生對象。這種做法是不能面向未來的。所以這里有一個提示:使用擴展原生Promise的庫時,需要謹慎。)

這里僅討論原生的Promise。

ES6 Promise

Promise對象狀態

在詳解Promise之前,先來點理論:

Promise/A+規范, 規定Promise對象是一個有限狀態機。

它三個狀態:

1、pending(執行中)

2、fulfilled(成功)

3、reject(拒絕)

其中pending為初始狀態,fulfilled和rejected為結束狀態(結束狀態表示promise的生命周期已結束)。

狀態轉換關系為:

pending->fulfilled,pending->rejected。

隨著狀態的轉換將觸發各種事件(如執行成功事件、執行失敗事件等)。

Promise形式

Promise的長相就像這樣子:

var promise = new Promise(function func(resolve, reject){

 // do somthing, maybe async

 if (success){

 return resolve(data);

 } else {

 return reject(data);

 }

});

promise.then(function(data){

 // do something... e.g

 console.log(data);

}, function(err){

 // deal the err.

})

這里的變量promise是Promise這個對象的實例。

promise對象在創建的時候會執行func函數中的邏輯。

邏輯處理完畢并且沒有錯誤時,resolve這個回調會將值傳遞到一個特殊的地方。這個特殊的地方在哪呢?就是下面代碼中的then,我們使用then中的回調函數來處理resolve后的結果。比如上面的代碼中,我們將值簡單的輸出到控制臺。如果有錯誤,則reject到then的第二個回調函數中,對錯誤進行處理。

配合上面的有限狀態機的理論,我們知道在Promise構造函數中執行回調函數代碼時,狀態為pending,resolve之后狀態為fulfilled,reject之后狀態為reject

Promise數據流動

以上是promise的第一次數據流動情況。

比較funny的是,promise的then方法依然能夠返回一個Promise對象,這樣我們就又能用下一個then來做一樣的處理。

第一個then中的兩個回調函數決定第一個then返回的是一個什么樣的Promise對象。

假設第一個then的第一個回調沒有返回一個Promise對象,那么第二個then的調用者還是原來的Promise對象,只不過其resolve的值變成了第一個then中第一個回調函數的返回值。

假設第一個then的第一個回調函數返回了一個Promise對象,那么第二個then的調用者變成了這個新的Promise對象,第二個then等待這個新的Promise對象resolve或者reject之后執行回調。

話雖然饒了一點,但是我自我感覺說的還是很清楚的呢。哈哈~

如果任意地方遇到了錯誤,則錯誤之后交給遇到的第一個帶第二個回調函數的then的第二個回調函數來處理。可以理解為錯誤一直向后reject, 直到被處理為止。

另外,Promise對象還有一個方法catch,這個方法接受一個回調函數來處理錯誤。

即:

promise.catch(function(err){

 // deal the err.

})

假設對錯誤的處理是相似的,這個方法可以對錯誤進行集中統一處理。所以其他的then方法就不需要第二個回調啦~

控制并發的Promise

Promise有一個"靜態方法"——Promise.all(注意并非是promise.prototype), 這個方法接受一個元素是Promise對象的數組。

這個方法也返回一個Promise對象,如果數組中所有的Promise對象都resolve了,那么這些resolve的值將作為一個數組作為Promise.all這個方法的返回值的(Promise對象)的resolve值,之后可以被then方法處理。如果數組中任意的Promise被reject,那么該reject的值就是Promise.all方法的返回值的reject值.

很op的一點是: 

then方法的第一個回調函數接收的resolve值(如上所述,是一個數組)的順序和Promise.all中參數數組的順序一致,而不是按時間順序排序。

還有一個和Promise.all相類似的方法Promise.race,它同樣接收一個數組,只不過它只接受第一個被resolve的值。

將其他對象變為Promise對象

Promise.resovle方法,可以將不是Promise對象作為參數,返回一個Promise對象。

有兩種情形:

假設傳入的參數沒有一個.then方法,那么這個返回的Promise對象變成了resolve狀態,其resolve的值就是這個對象本身。

假設傳入的參數帶有一個then方法(稱為thenable對象), 那么將這個對象的類型變為Promise,其then方法變成Promise.prototype.then方法。

Promise是解決異步的方案嗎?

最后說一點很重要的事:Promise的作用是解決回調金字塔的問題,對于控制異步流程實際上沒有起到很大的作用。真正使用Promise對異步流程進行控制,我們還要借助ES6 generator函數。(例如Tj大神的co庫的實現)。

然而ES7將有一個更加牛逼的解決方案:async/await,這個方案類似于co,但是加了原生支持。拭目以待吧。

總結

以上就是關于Javascript ES6中原生Promise的全部內容了,希望本文的內容對大家學習ES6能有所幫助

更多信息請查看網絡編程
易賢網手機網站地址:淺析Javascript ES6中的原生Promise
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點

版權所有:易賢網

中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲午夜精品一区二区三区他趣| 国产精品国产三级国产aⅴ中文 | 久久成人18免费观看| 亚洲自拍偷拍九九九| 成人欧美一区二区三区在线播放| 国产欧美一区二区精品忘忧草| 日韩精品中文字幕一区| 日韩精品中文字幕一区| 欧美一级片免费看| 日韩精品中文字幕在线一区| 精品国产乱码久久久久久1区2区| 久久午夜色播影院免费高清| 日本一区二区三区在线观看| 国产精品国产三级国产aⅴ无密码| 中文字幕人成不卡一区| 亚洲激情第一区| 亚洲 欧美综合在线网络| 高清在线观看日韩| 成人激情小说乱人伦| 91丨porny丨蝌蚪视频| 91成人免费电影| 欧美一卡二卡三卡四卡| 国产婷婷色一区二区三区四区 | 午夜精品视频一区| 日本成人在线视频网站| 韩国理伦片一区二区三区在线播放| 国产精品白丝jk白祙喷水网站| 成人app在线观看| 欧美人与z0zoxxxx视频| 精品人在线二区三区| 中文字幕一区二区三区蜜月 | 午夜私人影院久久久久| 日韩精品免费视频人成| 国产一区二区美女诱惑| 91丝袜高跟美女视频| 欧美精品乱码久久久久久| 精品久久五月天| 亚洲少妇30p| 久久成人免费电影| 色婷婷av一区| 精品欧美一区二区久久| 成人欧美一区二区三区小说 | 一区二区三区精品| 日韩一区欧美二区| 成人午夜av影视| 欧美男人的天堂一二区| 国产免费观看久久| 偷拍亚洲欧洲综合| 成人丝袜高跟foot| 日韩三级视频在线观看| 亚洲视频小说图片| 国产在线国偷精品产拍免费yy| 99久久亚洲一区二区三区青草| 欧美精品九九99久久| 亚洲国产精品成人综合| 日韩精品一二三| 日韩欧美一区二区免费| 最新久久zyz资源站| 日韩高清一区在线| 99久久国产免费看| 日韩精品一区二区三区视频| 亚洲福利视频一区| 色噜噜偷拍精品综合在线| 久久久久久久久久久久电影| 丝瓜av网站精品一区二区 | 日韩一级免费观看| 91精品国产手机| 亚洲精品欧美激情| 高清shemale亚洲人妖| 91精品国产综合久久福利| 亚洲精品国久久99热| 成人免费毛片aaaaa**| 精品久久久久久久久久久院品网| 五月天激情综合网| 色婷婷综合久色| 国产精品久久久久aaaa樱花| 丁香激情综合国产| 国产欧美视频一区二区| 丁香婷婷综合五月| 国产精品天干天干在线综合| 精品一区二区三区在线观看| 欧美丰满嫩嫩电影| 亚洲福利电影网| 欧美性大战xxxxx久久久| 亚洲欧美另类久久久精品| 99久久99久久综合| 亚洲欧美日韩在线| 国产精品一区二区91| 久久久久久久av麻豆果冻| 国产精品夜夜嗨| 久久精品网站免费观看| 精品久久久久av影院 | 国产成人一级电影| 日韩欧美一区二区在线视频| 亚洲成人av在线电影| 欧美色成人综合| 亚洲bt欧美bt精品| 91搞黄在线观看| 中文字幕亚洲欧美在线不卡| zzijzzij亚洲日本少妇熟睡| 亚洲男人天堂一区| 欧美私人免费视频| 天天综合色天天综合色h| 91精品福利在线一区二区三区| 美国三级日本三级久久99| 91精品国产色综合久久| 国产区在线观看成人精品| 国产乱国产乱300精品| 国产精品色呦呦| 99视频热这里只有精品免费| 亚洲欧美激情一区二区| 国产91在线看| 中文字幕亚洲一区二区av在线 | 亚洲欧美一区二区三区久本道91 | 久久精品亚洲麻豆av一区二区| 国产成人av一区| 一区二区三区av电影| 欧美精品123区| 日韩av网站在线观看| 欧美变态tickling挠脚心| 国产91丝袜在线观看| 日韩伦理免费电影| 欧美丝袜第三区| 国产精品一区二区在线看| 国产精品你懂的在线欣赏| 欧美电影一区二区| 国产精品一区二区91| 亚洲综合男人的天堂| 欧美高清精品3d| 风间由美性色一区二区三区| 亚洲成av人片观看| 久久精品无码一区二区三区| 日本精品免费观看高清观看| 麻豆成人在线观看| 亚洲美女区一区| 日韩欧美中文一区二区| 91官网在线观看| 国产九色sp调教91| 偷拍日韩校园综合在线| 欧美激情中文字幕| 在线播放中文一区| 成人午夜免费视频| 午夜视频在线观看一区| 国产网红主播福利一区二区| 粉嫩高潮美女一区二区三区| 亚洲 欧美综合在线网络| 国产精品―色哟哟| 精品少妇一区二区三区在线播放| 欧洲一区二区三区免费视频| 久久99精品久久久久久久久久久久| 亚洲欧洲国产日本综合| 久久久精品蜜桃| 日韩欧美中文一区二区| 欧美日韩中文字幕一区| 在线国产电影不卡| av成人免费在线观看| 国产盗摄一区二区三区| 亚洲大片精品永久免费| 亚洲日本在线看| 国产欧美视频在线观看| 精品福利在线导航| 欧美日韩国产一级| 91麻豆免费看片| 色婷婷综合久久| 99久久久免费精品国产一区二区| 国产馆精品极品| 成人精品小蝌蚪| 国产乱码精品1区2区3区| 日韩av电影免费观看高清完整版 | 一本到三区不卡视频| 国产成人精品网址| 国产一区二区三区在线观看免费视频| 麻豆精品精品国产自在97香蕉| 午夜激情一区二区三区| 一区二区三区中文在线| 伊人婷婷欧美激情| 伊人开心综合网| 亚洲一区二区三区视频在线播放 | 久草中文综合在线| 免费成人在线播放| 国产精品一区二区久久不卡| 精品一区二区三区在线视频| 极品少妇xxxx精品少妇| 狠狠色丁香婷婷综合久久片| 免费欧美高清视频| 国产精华液一区二区三区| 国产剧情一区在线| 99国产精品久久久久| 在线一区二区观看| 在线一区二区三区做爰视频网站| 欧美亚洲尤物久久| 日韩欧美一级特黄在线播放| 精品国精品国产| 亚洲国产精品成人久久综合一区| 亚洲精选视频免费看| 天堂午夜影视日韩欧美一区二区| 日韩avvvv在线播放| 国产精品一二三四五| 在线日韩国产精品| 精品国一区二区三区|