精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

Promise對象的基礎入門學習

開發 前端
Promise對象是CommonJS工作組提出的規范。Promise原本只是社區提出的構想,一些外部函數庫率先實現了該功能,ES6中將其寫入了語言標準。Promise是啥,它就是一個javascript中一個對象,起著代理作用,充當異步操作與回調函數之間的中介。

[[171668]]

今天來學習下Promise吧!其實這在筆試上也是一個考點。

基本介紹

Promise對象是CommonJS(熟悉的名字吧- -)工作組提出的規范.Promise原本只是社區提出的構想,一些外部函數庫率先實現了該功能,ES6中將其寫入了語言標準.

目的:為異步操作提供統一接口

Promise是啥,它就是一個javascript中一個對象,起著代理作用,充當異步操作與回調函數之間的中介。

避免類似于

 

這種嵌套地獄的產生.讓我們的代碼變得更加簡單易讀使用了Promise,大家都說好

  1. (new Promise(f1).then(f2)); 

總結:Promise使得異步操作的向下發展變成橫向發展,程序流程變得清晰,易于閱讀。

基本思想

  • 異步任務返回一個Promise對象,它有三種狀態

1.pending(未完成)

2.resolved,fulfilled(已完成)

3.rejected(失敗)

  • 它有兩種變化途徑

1.pending --> resolved/fulfilled

2.pending --> rejected

  • 它有兩種結果

1.異步操作成功,返回一個值,狀態變為resolved

2.異步操作失敗,拋出一個錯誤,狀態變為rejected

Promise使用.then()方法添加回調函數,then接收兩個回調函數,***個為成功時的回調函數,另一個為失敗時的回調函數.主要為狀態改變時調用相對的回調函數.

而且then可以鏈式調用。

基本使用

Promise構造函數接受一個函數作為參數,而該函數兩個參數分別是resolve和reject.它們由JS引擎提供,不需要自己部署.

  1. Promise(function(resolve,reject){}) 

resolve函數作用為:將Promise對象從未完成變為成功(Pending->Resolved),異步操作成功時調用,并將異步操作的結果作為參數傳遞出去.

reject函數作用為:將Promise對象從未完成變為失敗(Pending->Rejected),異步操作失敗時調用,并將異步操作報出的錯誤作為參數傳遞出去.

Promise.then()方法可以用于指定Resolved狀態和Reject狀態的回調函數.

  1. promise.then(function(value){//成功+_+!},function(value){//失敗Q_Q}); 

我們只想對異常進行處理時可以采用promise.then(undefined, onRejected)這種方式,或者promise.catch(onRejected)

!注意!此處有坑,接下來在深入節會進行講解

Promise.all()方法接收一個promise對象的數組為參數,當這個數組中所有的Promise對象全部變成resolve/reject狀態的時候,才會調用.then方法,其中傳入的promise是同時開始,并行執行的。

  1. promise.all([promise1,promise2,.....]); 

Promise.race()方法和Promise.all()方法一樣接收一個promise對象的數組作為參數,但是數組中有一個promise對象進入fulfilled或rejected狀態,就會開始后續處理. 

  1. promise.race([promise1,promise2,.....]); 

相關的語法糖 

  1. Promise.resolve(42); 
  2. //等價于 
  3. new Promise(function(resolve){ 
  4.     resolve(42); 
  5. }); 
  6.  
  7. Promise.reject(new Error("出錯了")); 
  8. //等價于 
  9. new Promise(function(resolve,reject){ 
  10.     reject(new Error("出錯了")); 
  11. });  

深入

關于Thenable對象

這是非常類似于Promise的東西,擁有.then方法.

其中比較經典的例子就是jQuery.ajax()返回的值就是thenable的. 

  1. var promise = Promise.resolve($.ajax('/json/comment.json')); 

這樣就可以將thenable對象轉化為promise對象

傳送門:Promise.resolve()

關于promise設計:總是異步操作

看代碼就能明白這個地方的問題了. 

  1. var promise = new Promise(function (resolve){ 
  2.     console.log("inner promise"); // 1 
  3.     resolve(42); 
  4. }); 
  5. promise.then(function(value){ 
  6.     console.log(value); // 3 
  7. }); 
  8. console.log("outer promise"); // 2 
  9. //結果是 
  10. /* 
  11. inner promise // 1 
  12. outer promise // 2 
  13. 42            // 3 
  14. */  

可以看出,即使我們調用promise.then時promise對象已經確定狀態,Promise也會以異步的方式調用回調函數,這就是Promise設計上的規定方針.

關于調用then/catch

每次調用then/catch,都會返回一個promise對象,這一點上我們通過使用===就可以判斷出來每次promise對象其實都是不一樣的

then和catch的錯誤處理區別

這點和上一點聯合起來很容易理解

直接上圖吧,來自于JavaScript Promise迷你書(中文版)

 在結合我們的代碼吧 

  1. // <1> onRejected不會被調用 
  2. function badMain(onRejected) { 
  3.     return Promise.resolve(42).then(throwError, onRejected); 
  4. // <2> 有異常發生時onRejected會被調用 
  5. function goodMain(onRejected) { 
  6.     return Promise.resolve(42).then(throwError).catch(onRejected); 
  7.  

onFullfilled中發生的錯誤,如在<1>里面throwError中的錯誤,是不會導致onRejected的執行(捕獲異常)的,我們只能通過后面的catch方法才能捕獲.

基本應用

不兼容方面

  1. 不兼容就是用polyfill吧
  2. 關于IE8以及以下版本中,catch會由于在ES3中為保留字,導致identifier not found錯誤,對此我們可以通過["catch"]或者then(undefined,function(){})來進行catch,而某些類庫中,采用了caught作為函數名來規避該問題.值得注意的是,有很多壓縮工具中自帶了.catch轉["catch"]

應用示例:

加載圖片 

  1. var preloadImage = function(path){ 
  2.   return new Promise(function(resolve,reject){ 
  3.     var image = new Image(); 
  4.     image.onload = resolve; 
  5.     image.onerror = reject; 
  6.     image.src = path; 
  7.   }) 
  8. preloadImage("https://dn-anything-about-doc.qbox.me/teacher/QianDuan.png").then(function(){ 
  9.   alert("圖片加載成功"); 
  10. },function(){ 
  11.   alert("圖片加載失敗"); 
  12. })  

Ajax操作 

  1. function search(term) { 
  2.     var url = 'http://example.com/search?q=' + term; 
  3.     var xhr = new XMLHttpRequest(); 
  4.     var result; 
  5.     var p = new Promise(function(resolve, reject) { 
  6.         xhr.open('GET', url, true); 
  7.         xhr.onload = function(e) { 
  8.             if (this.status === 200) { 
  9.                 result = JSON.parse(this.responseText); 
  10.                 resolve(result); 
  11.             } 
  12.         }; 
  13.         xhr.onerror = function(e) { 
  14.             reject(e); 
  15.         }; 
  16.         xhr.send(); 
  17.     }); 
  18.     return p; 
  19. search("Hello World").then(console.log, console.error);  

回到最初吧,其實Promise對象優點還是在于規范的鏈式調用,可以清晰看出程序流程.并且對于錯誤還能定義統一的處理方法。

責任編輯:龐桂玉 來源: segmentfault
相關推薦

2021-04-22 22:26:13

Java語言IT

2018-07-11 13:33:43

大數據人工智能Hadoop

2010-06-18 09:57:46

C#UML基礎

2021-01-28 08:34:30

Java對象定義

2021-01-18 08:52:28

Java對象多態

2011-09-27 13:52:41

2009-07-03 14:31:43

學習JSP

2020-12-24 08:36:14

JavaJava基礎

2024-07-09 09:33:18

2017-09-04 22:41:31

深度學習矩陣運算代碼

2017-09-18 10:48:06

深度學習零基礎入門

2012-02-29 00:00:43

Linux鳥哥

2011-02-24 11:10:33

Konqueror

2020-07-29 17:35:08

Promise源碼前端

2011-07-06 14:12:14

Objective-C

2009-06-17 09:58:48

JBoss Rules

2023-09-15 15:31:23

異步編程Promise

2022-02-22 19:04:01

Perl編程語言

2020-11-16 16:13:06

網絡安全互聯網滲透測試

2022-01-21 08:50:15

Promise任務隊列前端
點贊
收藏

51CTO技術棧公眾號

国产精品视频99| 欧美精品1区2区| 久久另类ts人妖一区二区| 亚洲精品77777| 欧美高清一级片| 国产精品免费免费| 91沈先生在线观看| 免费无码毛片一区二区app| 99精品国产一区二区三区2021| 亚洲www啪成人一区二区麻豆| 国产乱码精品一区二区三区日韩精品 | 国产精品二三区| 91夜夜揉人人捏人人添红杏| 天堂а√在线中文在线鲁大师| 玖玖精品一区| 五月天一区二区三区| 欧美久久电影| 国产精品污视频| 女同性一区二区三区人了人一| 亚洲成年人影院在线| 久久久久免费精品| 操你啦在线视频| ww亚洲ww在线观看国产| 国产精品免费小视频| 精品99在线观看| 亚洲国产欧美日韩在线观看第一区 | 成人乱色短篇合集| 国产午夜久久久| 国产一区不卡| 亚洲二区在线播放视频| 黄色在线视频网| 国产第一页在线| 91麻豆免费在线观看| 国产欧美中文字幕| 好吊妞视频一区二区三区| 日韩欧美一区免费| 亚洲黄在线观看| 亚洲娇小娇小娇小| 97人澡人人添人人爽欧美| 久久久亚洲精品石原莉奈| 91久久在线播放| 特级片在线观看| 精品免费视频| 日韩av最新在线观看| 中文字幕第66页| 日韩三区在线| 天天操天天综合网| 91传媒免费视频| 在线观看麻豆蜜桃| 久久毛片高清国产| 亚洲free嫩bbb| 中文字幕有码视频| 久久久成人网| 91精品国产99久久久久久| 国产精品视频一区二区在线观看| 天堂成人娱乐在线视频免费播放网站 | 精品五月天久久| 无码国产精品久久一区免费| 日韩国产大片| 欧美日韩亚洲另类| 亚洲精品视频导航| 国产传媒av在线| 亚洲主播在线播放| 亚洲精品视频一二三| 欧美777四色影视在线 | 亚洲综合伊人久久| 久久精品 人人爱| 在线区一区二视频| 黄色片视频在线免费观看| 九九精品调教| 亚洲成av人片一区二区梦乃| 日本香蕉视频在线观看| 在线xxxx| 亚洲综合在线五月| 免费人成自慰网站| 精品精品导航| 亚洲一区二区三区视频在线播放 | 国产日韩精品在线| 伊人网站在线观看| 麻豆freexxxx性91精品| 国产精品日日摸夜夜添夜夜av| 欧美一区二区三区久久久| 男人的天堂亚洲| 日韩av色在线| 怡红院成永久免费人全部视频| 人禽交欧美网站| 国产欧美日韩高清| 99久久久无码国产精品免费| 国产99久久久国产精品免费看| 97超碰人人看人人| 少妇精品高潮欲妇又嫩中文字幕| 成年人午夜久久久| 免费看成人片| 国外av在线| 国产精品久久福利| 国产在线无码精品| 成人一级福利| 在线视频亚洲一区| www.色.com| 日本在线中文字幕一区| 亚洲视频999| 成人无码精品1区2区3区免费看 | 在线中文字幕-区二区三区四区| 亚洲免费成人av| 老太脱裤让老头玩ⅹxxxx| 中文字幕这里只有精品| 精品美女久久久久久免费| 国产精品亚洲二区在线观看 | 国产精品久久久久久久久久久久久| 五月激情丁香网| 欧美bbbbb| 99久热re在线精品996热视频| 人妻一区二区三区免费| 欧美激情一区在线观看| 91免费版看片| 欧美精品总汇| 日韩美女天天操| 亚洲午夜福利在线观看| 精品一区二区三区在线| 欧美夫妻性视频| 波多野结衣黄色网址| 一区二区免费| 日韩国产激情在线| 久久午夜鲁丝片午夜精品| 免费在线成人网| 欧美理论一区二区| 精品一性一色一乱农村| 91精品欧美福利在线观看| 91久久免费视频| 在线视频免费在线观看一区二区| 亚洲最大成人网色| 毛片在线视频| 精品婷婷伊人一区三区三| 熟女少妇一区二区三区| 国产日韩一区| 黄色91av| 男人久久天堂| 精品视频偷偷看在线观看| 国产一级特黄aaa大片| 国产精品一区免费在线观看| 一区二区不卡在线观看| 91精品韩国| 亚洲男女性事视频| 国产精品100| 91在线小视频| 国产高清精品在线观看| 欧美人妖视频| 91成品人片a无限观看| 黄色一级大片在线免费看国产| 亚洲猫色日本管| 原创真实夫妻啪啪av| 欧美一区二区三区久久精品| 91视频最新| 高清电影在线免费观看| 亚洲国产欧美一区| 日韩久久久久久久久| 99在线热播精品免费| 久久成人免费观看| 亚洲精品小区久久久久久| 欧美亚洲国产另类| 国产福利小视频在线| 欧美午夜理伦三级在线观看| 大吊一区二区三区| 久久精品国产亚洲高清剧情介绍 | 国产专区在线| 欧美综合天天夜夜久久| 999福利视频| 国产超碰在线一区| 亚洲精品无码久久久久久| 欧美亚洲在线日韩| 91精品在线影院| 日本理论片午伦夜理片在线观看| 精品国产一区a| 日本一区二区三区四区五区| 久久久亚洲精品一区二区三区| 最新天堂中文在线| 一级欧洲+日本+国产| 国产精品大全| 性感美女一区二区在线观看| 色妞久久福利网| 午夜精品小视频| 岛国视频午夜一区免费在线观看| 亚洲黄色小说视频| 国产一区二区不卡| 国产免费黄视频| 日韩电影免费网址| 国产午夜精品在线| 国产精品蜜月aⅴ在线| 欧美国产日韩精品| 国产在线观看高清视频| 日韩亚洲欧美成人一区| 狠狠人妻久久久久久| 亚洲视频一区二区在线| 欧美一区二区三区成人精品| 久久精品国产77777蜜臀| 日韩人妻无码精品久久久不卡| 国产精品午夜一区二区三区| 91精品国产99久久久久久红楼| 性欧美xxx69hd高清| 久久精品国产精品亚洲| 天堂中文在线资| 日韩欧美一级精品久久| 精品无码一区二区三区的天堂| 亚洲美女视频在线观看| 最新中文字幕av| 国产成人av自拍| 在线免费观看视频黄| 亚洲人人精品| 老司机av福利| 精品一区欧美| 国产欧美丝袜| 欧美成年网站| 国产欧美亚洲精品| 校园春色亚洲色图| 97香蕉久久夜色精品国产| a免费在线观看| 一区二区欧美久久| 亚洲色大成网站www| 日韩免费成人网| 国产精品永久久久久久久久久| 色婷婷综合久色| 欧美日韩综合在线观看| 亚洲福利国产精品| 九九视频免费在线观看| 中文字幕日韩av资源站| 国产精品久久免费观看| 久久丝袜美腿综合| www.超碰97| av在线播放一区二区三区| 国产精品久久久久野外| 国产精品一区二区男女羞羞无遮挡 | 欧美一级在线视频| 亚洲一区二区三区网站| 在线观看网站黄不卡| 黄色在线视频网址| 日韩欧美中文免费| 黑人精品无码一区二区三区AV| 亚洲成人自拍网| 国产在线观看免费av| 亚洲一区二区成人在线观看| 老湿机69福利| 亚洲精品国产精品乱码不99| 污污的视频在线免费观看| 中文字幕一区二区三区不卡在线 | 头脑特工队2在线播放| 亚洲精品国偷自产在线99热| 天堂在线视频网站| 精品视频—区二区三区免费| 蜜芽tv福利在线视频| 精品性高朝久久久久久久| 天天在线女人的天堂视频| 国产丝袜视频一区| 欧美色视频免费| 亚洲天堂av电影| 成年人视频网站在线| 色综合伊人色综合网站| 麻豆av在线导航| 久久影视免费观看| 免费网站在线观看人| 久久男人av资源网站| av免费在线观看网站| 高清欧美性猛交xxxx| 成人片免费看| 国产精品久久久久久超碰| 日本成人一区二区| 不卡一区二区三区四区五区| 久久香蕉精品香蕉| 青青草久久网络| 国产精品二区不卡| youjizz.com在线观看| 男女精品网站| 午夜一级免费视频| 暴力调教一区二区三区| 99久久久无码国产精品性| 国产精品久久久一区麻豆最新章节| 人与动物性xxxx| 亚洲一区二区三区四区在线| 国产综合精品视频| 777欧美精品| 深夜福利视频一区| 日韩少妇与小伙激情| 2020av在线| 国产精品久久久久久久久男| 免费观看性欧美大片无片| 国产一区二区三区奇米久涩| 激情五月色综合国产精品| av磁力番号网| 国产日本精品| 一级做a爱视频| 91视频观看视频| 永久久久久久久| 一本色道综合亚洲| 精品国产无码一区二区三区| 亚洲男人的天堂在线播放| 黄网页在线观看| 4438全国成人免费| 国产成人免费视频网站视频社区 | 91精品在线影院| 蜜桃精品噜噜噜成人av| 欧美做受777cos| 日韩av中文在线观看| 潘金莲一级淫片aaaaa| 国产欧美精品区一区二区三区| 欧美成人精品欧美一级私黄| 色综合久久九月婷婷色综合| 精品区在线观看| 在线观看欧美www| caoporn视频在线观看| 91九色精品视频| 国产一区二区三区91| 野外做受又硬又粗又大视频√| 美女免费视频一区二区| 91精品国产自产| 亚洲国产成人av网| 91亚洲国产成人久久精品麻豆| 日韩成人在线网站| 久久青青色综合| 亚洲一区二区三区毛片| 久久网站免费观看| 蜜臀av午夜一区二区三区| 成人亚洲一区二区一| 精品国产精品国产精品| 欧美性猛片xxxx免费看久爱| 飘雪影院手机免费高清版在线观看| 免费av一区二区| 欧美激情不卡| 视频一区二区精品| 日韩精品亚洲一区二区三区免费| 人妻体内射精一区二区三区| 一区2区3区在线看| a天堂在线视频| 久久最新资源网| 成人黄色理论片| 一道本在线观看视频| 久久se这里有精品| 后入内射无码人妻一区| 欧美日韩精品一区二区天天拍小说| 黄色av免费在线观看| 国产精品99久久久久久久久久久久| 欧美一区二区三区红桃小说| 欧日韩免费视频| 成人高清在线视频| 日韩网红少妇无码视频香港| 亚洲激情第一页| 五月天av在线| 欧美一进一出视频| 日韩综合在线视频| 蜜桃久久精品成人无码av| 在线观看国产日韩| 成年网站在线| 91亚洲精品一区二区| 欧美1区2区视频| 亚洲精品成人无码毛片| 亚洲第一福利视频在线| 天天干天天草天天射| 欧美一级成年大片在线观看| 亚洲桃色综合影院| 韩国中文字幕av| 国产精品欧美综合在线| 国产免费无遮挡| 欧美日韩999| 日本欧美三级| 国产精品入口免费软件| 成人欧美一区二区三区| 丰满人妻妇伦又伦精品国产| 91成品人片a无限观看| 不卡一区2区| 精品人妻一区二区三| 亚洲成人1区2区| 国产三级视频在线| 国产日韩视频在线观看| 女同性一区二区三区人了人一| 亚洲av无码一区东京热久久| 欧美性猛交xxxx乱大交极品| a视频网址在线观看| 亚洲影视九九影院在线观看| 亚洲国产午夜| 精品熟妇无码av免费久久| 欧美一区二区高清| 在线看的毛片| 一区二区三区四区欧美| 成人在线综合网| 午夜一级黄色片| 九九热精品视频国产| 国产探花一区在线观看| 亚洲三级在线视频| 欧美性猛交xxxxx免费看| 黄色视屏免费在线观看| 久久亚洲高清| 韩国av一区二区三区在线观看| 国产精品不卡av| 日韩在线视频中文字幕| 女同另类激情重口| 日韩在线一区视频| 丰满岳妇乱一区二区三区| 成人在线播放免费观看| 日本一区二区免费看| 国产**成人网毛片九色 | 经典三级一区二区| 国产真人做爰毛片视频直播 |