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

async / await:更好的異步解決方案

開發 前端
在實際開發中總會遇到許多異步的問題,最常見的場景接口請求之后一定要等一段時間才能得到結果,如果遇到多個接口前后依賴,那么問題就變得復雜。大家都一直在嘗試使用更好的方案來解決這些問題。

[[198841]]

在實際開發中總會遇到許多異步的問題,最常見的場景接口請求之后一定要等一段時間才能得到結果,如果遇到多個接口前后依賴,那么問題就變得復雜。大家都一直在嘗試使用更好的方案來解決這些問題。最開始只能利用回調函數,后來開始有人使用Promise的思維來搞定。到ES6中開始支持原生的Promise,引入Generator函數。

直到ES7,有了async/await。

這是一個用同步的思維來解決異步問題的方案。

我想很多人可能還不太分得清同步與異步的區別。如果你已經徹底了解了事件循環,那么想必對異步的概念應該非常了解。當我們發出了請求,并不會等待響應結果,而是會繼續執行后面的代碼,響應結果的處理在之后的事件循環中解決。那么同步的意思,就是等結果出來之后,代碼才會繼續往下執行。

我們可以用一個兩人問答的場景來比喻異步與同步。A向B問了一個問題之后,不等待B的回答,接著問下一個問題,這是異步。A向B問了一個問題之后,然后就笑呵呵的等著B回答,B回答了之后他才會接著問下一個問題。

那么我們先記住這個特點,async/await使用同步的思維,來解決異步的問題。在繼續講解它的語法與使用之前,我們先介紹一下如何在我們的開發環境中支持該語法。

如果你已經知道如何配置,可跳過

一、如何在自己的開發環境中支持async/await語法

這里主要介紹兩種方式。

1. webpack中支持該語法

首先在當前項目中使用npm下載babel-loader。

  1. > npm install babel-loader --save-dev 

然后在配置文件webpack.confing.dev.js中配置,在module.exports.module.rules中添加如下配置元素即可。

  1.  
  2.     test: /\.(js|jsx)$/, 
  3.  
  4.     include: paths.appSrc, 
  5.  
  6.     loader: require.resolve('babel-loader'), 
  7.  
  8.     options: { 
  9.  
  10.       cacheDirectory: true
  11.  
  12.     }, 
  13.  
  14.   },  

如果你使用***版本的create-react-app或者vue-cli來構建你的代碼,那么它們應該已經支持了該配置。

2. gulp中支持該語法

首先安裝gulp插件

  1. > npm install gulp-babel --save-dev 

然后編寫任務

  1. var gulp = require('gulp'); 
  2.  
  3. var babel = require('gulp-babel'); 
  4.  
  5.   
  6.  
  7. gulp.task('babel'function() { 
  8.  
  9.   return gulp.src('src/app.js'
  10.  
  11.     .pipe(babel()) 
  12.  
  13.     .pipe(gulp.dest('dist')); 
  14.  
  15. });  

二、如何使用

async函數是Generator的一個語法糖。如果你不知道Generator是什么函數也沒有關系,我們只需要知道async函數實際上返回的是一個Promise對象即可。

  1. async function fn() { 
  2.  
  3.     return 30; 
  4.  
  5.  
  6.   
  7.  
  8. // 或者 
  9.  
  10. const fn = async () => { 
  11.  
  12.     return 30; 
  13.  
  14.  

在聲明函數時,前面加上關鍵字async,這就是async的用法。當我們用console.log打印出上面聲明的函數fn,我們可以看到如下結果:

  1. console.log(fn()); 
  2.  
  3.   
  4.  
  5.     // result 
  6.  
  7.     Promise = { 
  8.  
  9.         __proto__: Promise, 
  10.  
  11.         [[PromiseStatus]]: "resolved"
  12.  
  13.         [[PromiseValue]]: 30 
  14.  
  15.     }  

很顯然,fn的運行結果其實就是一個Promise對象。因此我們也可以使用then來處理后續邏輯。

  1. fn().then(res => { 
  2.  
  3.     console.log(res);  // 30 
  4.  
  5. })  

await的含義為等待。意思就是代碼需要等待await后面的函數運行完并且有了返回結果之后,才繼續執行下面的代碼。這正是同步的效果。

但是我們需要注意的是,await關鍵字只能在async函數中使用。并且await后面的函數運行后必須返回一個Promise對象才能實現同步的效果。

當我們使用一個變量去接收await的返回值時,該返回值為Promise中resolve出來的值。

  1. // 定義一個返回Promise對象的函數 
  2.  
  3. function fn() { 
  4.  
  5.     return new Promise((resolve, reject) => { 
  6.  
  7.         setTimeout(() => { 
  8.  
  9.             resolve(30); 
  10.  
  11.         }, 1000); 
  12.  
  13.     }) 
  14.  
  15.  
  16.   
  17.  
  18. // 然后利用async/await來完成代碼 
  19.  
  20. const foo = async () => { 
  21.  
  22.     const t = await fn(); 
  23.  
  24.     console.log(t); 
  25.  
  26.     console.log('next code'); 
  27.  
  28.  
  29.   
  30.  
  31. foo(); 
  32.  
  33.   
  34.  
  35. // result: 
  36.  
  37. // 30 
  38.  
  39. // next code  

運行這個例子我們可以看出,當在async函數中,運行遇到await時,就會等待await后面的函數運行完畢,而不會直接執行next code。

如果我們直接使用then方法的話,想要達到同樣的結果,就不得不把后續的邏輯寫在then方法中。

  1. const foo = () => { 
  2.  
  3.     return fn().then(t => { 
  4.  
  5.         console.log(t); 
  6.  
  7.         console.log('next code');     
  8.  
  9.     }) 
  10.  
  11.  
  12.   
  13.  
  14. foo();  

很顯然如果使用async/await的話,代碼結構會更加簡潔,邏輯也更加清晰。

異常處理

在Promise中,我們知道是通過catch的方式來捕獲異常。而當我們使用async時,則通過try/catch來捕獲異常。

  1. function fn() { 
  2.  
  3.     return new Promise((resolve, reject) => { 
  4.  
  5.         setTimeout(() => { 
  6.  
  7.             reject('some error.'); 
  8.  
  9.         }, 1000); 
  10.  
  11.     }) 
  12.  
  13.  
  14.   
  15.  
  16. const foo = async () => { 
  17.  
  18.     try { 
  19.  
  20.         await fn(); 
  21.  
  22.     } catch (e) { 
  23.  
  24.         console.log(e);  // some error 
  25.  
  26.     } 
  27.  
  28.  
  29.   
  30.  
  31. foo();  

如果有多個await函數,那么只會返回***個捕獲到的異常。

  1. function fn1() { 
  2.  
  3.     return new Promise((resolve, reject) => { 
  4.  
  5.         setTimeout(() => { 
  6.  
  7.             reject('some error fn1.'); 
  8.  
  9.         }, 1000); 
  10.  
  11.     }) 
  12.  
  13.  
  14. function fn2() { 
  15.  
  16.     return new Promise((resolve, reject) => { 
  17.  
  18.         setTimeout(() => { 
  19.  
  20.             reject('some error fn2.'); 
  21.  
  22.         }, 1000); 
  23.  
  24.     }) 
  25.  
  26.  
  27.   
  28.  
  29. const foo = async () => { 
  30.  
  31.     try { 
  32.  
  33.         await fn1(); 
  34.  
  35.         await fn2(); 
  36.  
  37.     } catch (e) { 
  38.  
  39.         console.log(e);  // some error fn1. 
  40.  
  41.     } 
  42.  
  43.  
  44.   
  45.  
  46. foo();  

實踐

在實踐中我們遇到異步場景最多的就是接口請求,那么這里就以jquery中的$.get為例簡單展示一下如何配合async/await來解決這個場景。

  1. // 先定義接口請求的方法,由于jquery封裝的幾個請求方法都是返回Promise實例,因此可以直接使用await函數實現同步 
  2.  
  3. const getUserInfo = () => $.get('xxxx/api/xx'); 
  4.  
  5.   
  6.  
  7. const clickHandler = async () => { 
  8.  
  9.     try { 
  10.  
  11.         const resp = await getUserInfo(); 
  12.  
  13.         // resp為接口返回內容,接下來利用它來處理對應的邏輯 
  14.  
  15.         console.log(resp); 
  16.  
  17.   
  18.  
  19.         // do something 
  20.  
  21.     } catch (e) { 
  22.  
  23.         // 處理錯誤邏輯 
  24.  
  25.     } 
  26.  
  27.  

為了保證邏輯的完整性,在實踐中try/catch必不可少。總之,不處理錯誤邏輯的程序員不是好程序員。

與Promise相比,個人認為async/await有一定的簡潔性,但也并非就比Promise有絕對的優勢,因此只能算是提供了另外一種稍好的方式,至于大家學習之后選擇哪種方式來解決自己的問題,這僅僅只是你的個人喜好問題。 

責任編輯:龐桂玉 來源: 前端大全
相關推薦

2021-06-28 08:10:59

JavaScript異步編程

2024-12-23 08:00:45

2014-07-15 10:08:42

異步編程In .NET

2021-09-01 10:35:19

asyncawaitVue

2023-11-03 14:32:38

2023-04-14 08:10:59

asyncawait

2014-07-15 10:31:07

asyncawait

2016-11-22 11:08:34

asyncjavascript

2024-06-25 08:33:48

2018-12-19 18:40:28

JavaScriptes6 前端

2022-07-11 10:32:35

Vue3await響應式

2023-10-08 10:21:11

JavaScriptAsync

2024-11-13 01:00:18

asyncawait?編程

2018-06-14 14:25:42

2013-08-26 09:18:52

2021-02-09 09:53:11

C#多線程異步

2025-09-26 01:25:00

2023-05-08 11:49:05

asyncawait場景

2024-10-14 08:29:14

異步編程任務

2025-07-24 09:45:37

點贊
收藏

51CTO技術棧公眾號

久久深夜福利| 欧洲福利电影| 粉嫩老牛aⅴ一区二区三区| 日本视频一区在线观看| 国产精品久久久久久久久毛片 | 欧美jizz18| 一区二区三区精品| 欧美精品亚洲| 99国产精品99| 美女爽到呻吟久久久久| 久久中文字幕在线| 精品国产av无码| 高清不卡一区| 在线观看亚洲一区| 69成人精品免费视频| 成人av.网址在线网站| 国产成人精品亚洲男人的天堂| 国产99久久精品一区二区300| 日韩一区二区免费在线电影| 成人一区二区三| 免费电影视频在线看| 日本一区二区三区在线观看| 国产一区二区三区四区hd| 中文字幕激情视频| 亚洲激情另类| 欧美精品少妇videofree| 精品无码国产污污污免费网站| 亚洲日本一区二区三区在线| 欧美视频完全免费看| 人妻av中文系列| 成码无人av片在线观看网站| 久久精品亚洲一区二区三区浴池 | 亚洲国产精品成人综合色在线婷婷| 99理论电影网| 国产农村妇女毛片精品| 日韩精品91亚洲二区在线观看| 久久久久久美女| 91 在线视频| 久久精品国产68国产精品亚洲| 亚洲精品自拍视频| www国产视频| 一区二区日韩| 日韩午夜激情av| 伊人色在线视频| 欧美黄色a视频| 欧美日韩视频在线第一区| 日本成人在线免费视频| 日韩激情电影免费看| 亚洲第一久久影院| 99在线免费视频观看| 亚洲第一图区| 一区二区视频免费在线观看| 日韩精品福利片午夜免费观看| 男人的天堂在线视频免费观看| 欧美激情综合在线| 婷婷四月色综合| 看全色黄大色黄女片18| 中文字幕第四页| 亚洲高清资源| 欧美激情精品久久久久久| 加勒比婷婷色综合久久| 亚洲一级毛片| 欧美日韩xxx| 国产精彩视频在线观看| 亚洲激情专区| 欧亚精品中文字幕| 在线观看日本网站| 日韩国产在线一| 国产精品久久久久久久久久久新郎 | 性猛交富婆╳xxx乱大交天津| 国产精品中文字幕欧美| 成人情视频高清免费观看电影| 亚洲乱色熟女一区二区三区| 成人免费视频caoporn| 黄色一区三区| 欧美在线一卡| 国产精品传媒入口麻豆| 欧美在线观看视频免费| 欧美一级鲁丝片| 日本韩国精品在线| 免费成年人高清视频| 视频二区欧美| 亚洲欧美另类中文字幕| 99热在线观看精品| 亚洲国产mv| 国产精品美女www| 亚洲av无码一区二区三区dv| 91看片淫黄大片一级| 亚洲国产日韩欧美| 好久没做在线观看| 日本久久一区二区三区| 天堂av手机在线| 欧美精品密入口播放| 中文字幕亚洲情99在线| 久久综合加勒比| 久久在线精品| 97人摸人人澡人人人超一碰| 深夜福利在线看| 国产精品福利电影一区二区三区四区| 国产传媒久久久| 日本黄色一区| 台湾成人免费视频| 91精品91久久久中77777| 欧美一级特黄aaa| 日韩动漫一区| 超碰91人人草人人干| www.国产com| 国产精品白丝jk白祙喷水网站| 久久99精品久久久久久久久久| 免费大片在线观看www| 午夜精品久久久久久久99水蜜桃 | 小泽玛利亚一区| 一本色道久久| 亚洲综合在线做性| 国产一二三在线观看| 亚洲综合精品自拍| 亚洲天堂网2018| 九九精品久久| 国内精品小视频| 国产精品视频无码| 国产午夜一区二区三区| 久操网在线观看| 欧美经典一区| 久久色免费在线视频| 波多野结衣高清在线| bt7086福利一区国产| 黄色网络在线观看| www.久久.com| 一区二区欧美久久| 亚洲第一网站在线观看| 99久久精品久久久久久清纯| 粉嫩av一区二区三区天美传媒| 日韩成人一区| 一区二区三区国产视频| 色一情一乱一伦| av在线不卡免费看| 和岳每晚弄的高潮嗷嗷叫视频| 蜜桃精品一区二区三区| www.精品av.com| 中文字幕乱码人妻二区三区| 久久精品人人做人人爽人人| 欧美精品一区免费| 欧美a一欧美| 午夜精品一区二区三区视频免费看 | 欧美日产国产精品| 日韩欧美黄色网址| 中文字幕第28页| 女生裸体视频一区二区三区| 国产男女猛烈无遮挡91| 波多野结衣在线影院| 色狠狠综合天天综合综合| 中文字幕在线观看网址| 在线亚洲自拍| 欧美国产一区二区在线| 唐人社导航福利精品| 亚洲免费精彩视频| 免费精品一区二区| 国产精品免费观看视频| 91福利免费观看| 综合天堂av久久久久久久| 97视频热人人精品| 毛片网站在线看| 亚洲成人激情图| 综合网在线观看| 日本一区二区三区免费乱视频| youjizzxxxx18| 偷拍欧美精品| 成人在线视频电影| 日本三级一区| 一个人看的www久久| 91麻豆国产在线| 樱桃国产成人精品视频| 国产精品久久久久久亚洲av| 999亚洲国产精| 色一情一乱一伦一区二区三区 | 亚洲欧洲另类| 免费中文日韩| 国产精品传媒麻豆hd| 久久艳片www.17c.com| 人妻夜夜爽天天爽| 91国偷自产一区二区开放时间| 四虎地址8848| av中文字幕不卡| www.久久久精品| 欧美性色综合| 欧洲久久久久久| 欧美日本三级| 热久久免费视频精品| 欧美激情二区| 日韩av在线导航| 中文字幕无线码一区| 亚洲尤物视频在线| www色com| 国产69精品久久99不卡| 北条麻妃在线一区| 亚洲最新av| 欧美久久综合性欧美| 激情视频亚洲| 日韩美女福利视频| 精品无码国模私拍视频| 国产亚洲亚洲国产一二区| 97在线视频免费| yourporn在线观看视频| 欧美草草影院在线视频| 亚洲精品国产无码| 亚洲午夜久久久久久久久久久| 日韩一区二区a片免费观看| 国产一区二区三区综合| www.日日操| 亚洲经典视频在线观看| 一区二区在线观看网站| 亚洲成a人片77777在线播放 | 美日韩丰满少妇在线观看| 日本大臀精品| 欧美成人精品1314www| 亚洲无码久久久久| 日韩人在线观看| 欧美一级高潮片| 亚洲摸摸操操av| 女人裸体性做爰全过| 久久久久久久久99精品| 国产大尺度视频| 麻豆91在线看| 男人的天堂日韩| 国产亚洲一区在线| 妞干网在线播放| 亚洲人成免费网站| 伊人久久大香线蕉午夜av| 神马久久一区二区三区| 韩国一区二区三区美女美女秀| 中文字幕成人| 国产日韩av高清| 免费在线成人激情电影| 人九九综合九九宗合| 极品视频在线| 国产69精品99久久久久久宅男| 一区二区三区伦理| 欧美精品在线第一页| 国内精品久久久久国产| 亚洲色图校园春色| 国产资源在线看| 亚洲人成五月天| 激情小说 在线视频| 亚洲欧美国产精品专区久久| 视频一区二区在线播放| 亚洲欧美精品伊人久久| 黄色免费在线播放| 一区二区三区国产在线观看| 91porn在线观看| 北条麻妃一区二区三区中文字幕| 在线观看麻豆| 精品国产一区二区三区在线观看| 夜级特黄日本大片_在线| 久久精品成人动漫| av官网在线播放| 欧美激情精品久久久久久大尺度| 性色av蜜臀av色欲av| 国产一区二区精品福利地址| 日韩电影大全在线观看| 欧美一二区在线观看| 亚洲精品日韩成人| 婷婷综合五月| 91黄色在线看| 午夜在线精品| 无码日韩人妻精品久久蜜桃| 美国三级日本三级久久99| 天天干天天玩天天操| 国产一级精品在线| 催眠调教后宫乱淫校园| www精品美女久久久tv| a级大片在线观看| 国产精品欧美一区喷水| 美女福利视频在线观看| 天天做天天摸天天爽国产一区| 4438国产精品一区二区| 欧美日韩国产123区| 亚洲国产精品久久久久久6q| 日韩精品在线看| 在线播放日本| 久久久久久久久久久免费 | 天天影视天天精品| 日韩精品一区二区三区四| 久久精品二区三区| 999久久久精品视频| 91丨九色丨国产丨porny| 正在播放国产对白害羞| 一区二区三区免费观看| 久久久久99精品成人片我成大片| 欧美日韩久久久| 欧美 日韩 中文字幕| 伊人男人综合视频网| 亚洲欧美成人影院| 国产成人综合亚洲| 日韩在线观看中文字幕| 日本视频一区二区在线观看| 狠狠色综合网| 15—17女人毛片| 成人网在线免费视频| 少妇一级黄色片| 亚洲h精品动漫在线观看| 中文字幕在线2018| 亚洲国语精品自产拍在线观看| 日本电影全部在线观看网站视频| 97国产suv精品一区二区62| 欧美成人福利| 麻豆传媒一区| 国产精品theporn| 色免费在线视频| 久久亚洲精华国产精华液| 国产精品久久久精品四季影院| 色婷婷亚洲婷婷| 日韩专区第一页| 欧美成人全部免费| 国产亚洲精彩久久| 欧美综合激情| 日韩亚洲国产欧美| 肉丝美足丝袜一区二区三区四| 中文字幕第一区第二区| 久久久免费高清视频| 精品国产一区二区三区不卡| 99视频在线看| 视频一区二区三区中文字幕| 91成人在线观看喷潮蘑菇| 国产精品毛片无遮挡高清| 精品国产乱码一区二区| 欧美电影精品一区二区| 久草中文在线观看| 国产日韩欧美夫妻视频在线观看| 久久99精品久久久久久园产越南| 我的公把我弄高潮了视频| 国产精品一区二区男女羞羞无遮挡 | 成人aaaa免费全部观看| 午夜免费激情视频| 在线成人小视频| 永久av在线| 国产日韩欧美电影在线观看| 成人精品影视| 一区二区在线播放视频| 久久久精品黄色| 在线观看 亚洲| 亚洲视频在线观看网站| 依依综合在线| 蜜桃网站成人| 久久综合九色综合欧美狠狠| 色婷婷在线影院| 色婷婷精品久久二区二区蜜臂av| 亚洲av毛片成人精品| 97不卡在线视频| 久久99蜜桃| 亚洲视频在线a| 国产精品天美传媒| 一卡二卡在线视频| 久久亚洲精品视频| 亚洲午夜免费| 久久视频这里有精品| 91啪亚洲精品| 波多野结衣爱爱| 中文字幕欧美日韩| 91成人福利社区| 91传媒免费视频| 波波电影院一区二区三区| www.国产高清| 日韩激情在线视频| 另类中文字幕国产精品| 亚洲精品一区二| 国产一区日韩二区欧美三区| 妺妺窝人体色www婷婷| 亚洲成人教育av| 欧美一区 二区 三区| 一区不卡视频| 国产a级毛片一区| 91精品国产乱码久久久张津瑜| 国产午夜精品久久久| 国产精品久久久久77777丨| 一区二区三区偷拍| 丁香激情综合国产| 一级片视频在线观看| 色噜噜亚洲精品中文字幕| 亚洲啊v在线免费视频| 北条麻妃在线视频观看| 国产精品久久久久久久久晋中 | 欧美综合在线第二页| 国产精品一线天粉嫩av| 九一精品久久久| 亚洲大型综合色站| 91porn在线观看| 国产精品自拍首页| 性欧美video另类hd尤物| 一本一本久久a久久精品综合小说| 国产精品毛片aⅴ一区二区三区| 中国丰满熟妇xxxx性| 中文字幕精品综合| 国产91免费看| 国产日韩av在线| 亚洲欧美日韩精品一区二区| 小向美奈子av| 国产偷国产偷亚洲清高网站| 久久亚洲精精品中文字幕| 97在线免费公开视频| 亚洲另类春色国产|