精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

免费看一级一片| 成人免费观看视频在线观看| 国产在成人精品线拍偷自揄拍| 97人人精品| 日韩欧美一区在线观看| 男女啪啪免费视频网站| 国产区高清在线| 老司机精品视频在线| 欧美另类极品videosbestfree| 欧美日韩人妻精品一区在线| 欧美va在线观看| 亚洲免费色视频| 久久久久久久有限公司| 亚洲黄网在线观看| 欧美国产高清| 一本色道久久88亚洲综合88| 午夜性福利视频| 午夜激情成人网| 亚洲一区在线看| 亚洲精品一区国产精品| 狠狠躁夜夜躁av无码中文幕| 青青草精品视频| 高清在线视频日韩欧美| 国产又粗又猛又爽又黄的视频小说| 9l视频自拍九色9l视频成人| 欧美色倩网站大全免费| 老子影院午夜伦不卡大全| 2021av在线| 91毛片在线观看| 国产 高清 精品 在线 a| 在线观看免费中文字幕| 亚洲欧美日本视频在线观看| 欧美日韩aaaa| 三级av在线免费观看| 免费久久久久久久久| 精品久久久久久最新网址| 精品亚洲视频在线| 狠狠久久综合| 午夜精品久久久久久不卡8050| 蜜臀av.com| 黄色小网站在线观看| 中文字幕欧美三区| 日韩精品不卡| 九色在线视频| 久久精品人人做人人爽人人| 精品一区二区三区视频日产| 丰满肉嫩西川结衣av| 国产伦精品一区二区三区免费迷 | 亚洲激情电影中文字幕| 国产黑丝在线视频| 国产精品xnxxcom| 欧美视频一二三区| 丰满少妇在线观看| 欧美精品总汇| 欧美视频在线一区二区三区 | 丁香花五月激情| 色一区二区三区四区| 一区二区三区美女xx视频| 欧美多人猛交狂配| 国产日韩欧美一区二区三区| 亚洲欧美精品一区| 精品人妻中文无码av在线| 国产精品日韩精品中文字幕| 亚洲少妇激情视频| 亚洲精品午夜视频| 欧美色就是色| 色狠狠av一区二区三区香蕉蜜桃| 日韩精品久久久久久久的张开腿让| av一区二区高清| 日韩在线免费高清视频| 日本午夜在线观看| 好看的亚洲午夜视频在线| 高清视频欧美一级| 无码人妻精品一区二区50| 欧美a一区二区| 91免费版网站入口| 国产 日韩 欧美 精品| 91在线精品秘密一区二区| 欧美自拍资源在线| 黄色在线观看网站| 精品人伦一区二区三区蜜桃网站 | 久久99热这里只有精品| 国产综合在线观看视频| 亚洲高清视频网站| 久久只精品国产| 在线日韩av永久免费观看| 天堂va在线| 一本色道久久综合亚洲91| 日韩一区二区三区不卡视频| 麻豆国产一区二区三区四区| 亚洲国内精品视频| 女人黄色一级片| 欧美一区二区| 日本a级片电影一区二区| 亚洲怡红院av| 99视频在线精品| 一区二区视频国产| 激情aⅴ欧美一区二区欲海潮| 色婷婷亚洲一区二区三区| 亚洲一区二区偷拍| 西野翔中文久久精品字幕| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 在线观看a级片| 欧美日韩精品在线播放| 高潮一区二区三区| 另类尿喷潮videofree| 色偷偷噜噜噜亚洲男人| 日本三级黄色大片| 久久99日本精品| 欧美日韩亚洲在线| 国内高清免费在线视频| 欧美性猛交xxxxxxxx| 黄色国产在线视频| 国产精品久久久久久| 欧美在线视频播放| 亚洲男人第一天堂| 国产精品国产三级国产三级人妇| 久草热视频在线观看| 国产精品国产三级在线观看| 亚洲天堂av在线免费| 久久久久久久伊人| 国产九色精品成人porny| 偷拍视频一区二区| 成人免费网站视频| 亚洲第一福利视频| 日本精品在线免费观看| 日韩成人伦理电影在线观看| 精品国产综合久久| 国产激情视频在线| 精品视频在线视频| 亚洲狠狠婷婷综合久久久久图片| 亚洲精品a级片| 国产精品网站视频| 国产女主播在线写真| 岛国av一区二区在线在线观看| 国产免费中文字幕| 欧美一区二区麻豆红桃视频| 69av视频在线播放| 神马午夜在线观看| 亚洲国产成人精品视频| www.欧美com| 欧美视频不卡| 91午夜理伦私人影院| 午夜视频在线| 欧美麻豆精品久久久久久| 精品熟妇无码av免费久久| 玖玖玖国产精品| 欧美日韩一区二区三区免费| 亚洲性受xxx喷奶水| 日韩电影免费观看在线观看| 国产精品theporn动漫| 国产成人亚洲综合a∨婷婷| 男人草女人视频| 天堂精品在线视频| 久久青草精品视频免费观看| 蜜桃视频污在线观看| 亚洲福利国产精品| 一区二区三区少妇| 蜜桃av综合| 婷婷久久五月天| 国产精品久久久久久av公交车| 另类专区欧美制服同性| 国产xxxxxx| 亚洲高清久久久| 极品粉嫩小仙女高潮喷水久久| 亚洲综合好骚| 日韩欧美在线一区二区| 欧美男女视频| 超碰91人人草人人干| 亚洲精品一区二区三区区别| 亚洲第一激情av| 亚洲大胆人体在线| 少妇一级黄色片| 久久精品国产久精国产爱| 中文字幕久久综合| 久久天堂久久| 性欧美在线看片a免费观看| 丝袜视频国产在线播放| 日本高清不卡一区| 久久福利免费视频| 国产美女精品一区二区三区| 国产av熟女一区二区三区| 精品三级av在线导航| 欧美在线观看视频| 日本精品在线| 亚洲第一av在线| 国产男人搡女人免费视频| 日韩美女视频一区| 偷偷色噜狠狠狠狠的777米奇| 老司机午夜免费精品视频| 中文字幕欧美日韩一区二区| 黄色网一区二区| 国产免费亚洲高清| 福利小视频在线| 在线播放国产精品| 黑人精品一区二区三区| 欧美最猛黑人xxxxx猛交| 91aaa在线观看| 久久久精品免费网站| 欧美一区二区三区影院| 石原莉奈在线亚洲二区| 老司机激情视频| 欧洲乱码伦视频免费| 国产偷国产偷亚洲高清97cao| 欧美精品总汇| 97精品一区二区三区| 黄网站在线播放| 日韩精品中文字| 不卡视频免费在线观看| 在线观看亚洲一区| 国产特黄大片aaaa毛片| 综合色中文字幕| 黑人巨大精品欧美| 国产精品99久久久| 亚洲免费av一区二区三区| 欧美午夜影院| 久久免费视频2| 国精一区二区| 久久99精品久久久久久青青日本| 国产精品国产三级在线观看| 国产精品高潮粉嫩av| 国产中文在线播放| 免费97视频在线精品国自产拍| 成人午夜影视| 亚洲美女激情视频| 人妻夜夜爽天天爽| 日韩视频免费观看高清完整版在线观看 | 国产一区99| 久久99精品久久久久久秒播放器 | 黑人巨大精品| 97国产精品久久| 青草视频在线免费直播| 精品国产自在精品国产浪潮| 超碰在线国产| 亚洲无av在线中文字幕| 日本一区二区三区在线观看视频| 精品va天堂亚洲国产| 亚洲国产精彩视频| 日韩欧美亚洲另类制服综合在线| 国产美女明星三级做爰| 欧美喷潮久久久xxxxx| 最近中文字幕在线视频| 在线观看av不卡| 波多野结衣家庭主妇| 色网站国产精品| jizz国产在线观看| 色天天综合久久久久综合片| 欧美在线观看不卡| 色婷婷av一区二区三区软件| 久久久国产高清| 欧美日韩国产一区二区三区| 日本最新中文字幕| 精品国产乱码久久久久久婷婷 | 亚洲激情国产| 国产高清av在线播放| 精品二区久久| 国产九九九九九| 午夜亚洲视频| 欧美婷婷精品激情| 久久国产生活片100| 激情成人在线观看| 大美女一区二区三区| 少妇精品无码一区二区三区| 91丨porny丨蝌蚪视频| 国产手机在线观看| 中文幕一区二区三区久久蜜桃| 免费黄色国产视频| 一区二区三区美女视频| 日韩成人免费观看| 91福利小视频| 国产精品爽爽久久久久久| 日韩亚洲欧美高清| 香蕉视频网站在线| 国产亚洲欧美日韩一区二区| 天堂中文а√在线| 欧美高清自拍一区| 电影一区二区三| 国产噜噜噜噜久久久久久久久| 国产95亚洲| 久久av一区二区| 日韩欧美视频| 国产一区二区三区小说| 久久久久久黄| 欧美一级特黄aaa| 99精品黄色片免费大全| 国产18无套直看片| 亚洲一区二区五区| 黄色大全在线观看| 精品国产乱码久久久久久蜜臀| 免费一级毛片在线观看| 精品国产一区二区三区在线观看| 24小时免费看片在线观看| 国产精品99久久久久久久久久久久| 国产精区一区二区| 欧美日韩亚洲一区二区三区在线观看| 亚洲欧美在线专区| 人妻内射一区二区在线视频| 国产一区二区h| 久久久久久久毛片| 亚洲国产视频网站| 在线观看毛片视频| 日韩高清av一区二区三区| 麻豆91在线| 国产v综合ⅴ日韩v欧美大片| 久久av网站| 亚洲国产精品一区二区第一页| 亚洲午夜av| 久久精品视频在线观看免费| 久久久午夜精品理论片中文字幕| 欧美成人片在线观看| 欧美怡红院视频| 色天堂在线视频| 久久露脸国产精品| 欧美特黄不卡| 亚洲午夜精品一区二区三区| 亚洲欧美久久| 星空大象在线观看免费播放| 亚洲欧美另类图片小说| 中文字幕你懂的| 国产亚洲精品久久久久久牛牛| 97人人在线视频| 97夜夜澡人人双人人人喊| 久久综合88| 天天影视综合色| 久久久蜜桃精品| 免费观看成人毛片| 精品欧美一区二区在线观看| 精品美女在线观看视频在线观看| 国产成人精品免费久久久久| 亚洲v天堂v手机在线| 国产精品久久中文字幕| 懂色av一区二区三区蜜臀| 成人在线观看免费完整| 欧美日韩精品免费| a√资源在线| 国产欧美日韩中文字幕| 日韩一区二区三区免费播放| 久久久精品麻豆| 国产三级精品视频| 波多野结衣视频网址| 亚洲午夜女主播在线直播| 欧美91看片特黄aaaa| 久久久久久欧美精品色一二三四| 国产视频一区在线观看一区免费| 久久免费精品国产| 欧美日韩午夜剧场| 天堂视频中文在线| 欧洲午夜精品久久久| 亚洲精品蜜桃乱晃| 黄色一级免费大片| 亚洲国产精品精华液2区45| 欧美激情一区二区三区免费观看| 在线观看精品国产视频| 欧美亚洲黄色| 路边理发店露脸熟妇泻火| 国产成人av一区二区三区在线 | 日韩视频一区二区| 日本资源在线| 国产精品乱码| 99日韩精品| 在线不卡av电影| 欧美最新大片在线看| 1024视频在线| 亚洲自拍欧美色图| 在线播放不卡| 久久精品国产亚洲AV熟女| 欧洲另类一二三四区| 黄色一级片在线观看| 国产99在线免费| 国产精品免费看| 国产精品成人无码免费| 欧美高清性hdvideosex| 国产黄色大片在线观看| 久久伦理网站| 久久狠狠亚洲综合| 日韩xxx高潮hd| 在线观看91久久久久久| 电影91久久久| 日韩精品 欧美| 国产精品每日更新| 亚洲国产视频一区二区三区| 国产91|九色| 亚洲成人二区| 91精品国产自产| 欧美精品一二三| sm捆绑调教国产免费网站在线观看 | 精品国产伦一区二区三区| 91精品国产91| 国产国产精品| 成人免费看aa片| 欧美一区二区免费视频| 成人美女大片| www婷婷av久久久影片| 久久久久国产精品人| 国产视频aaa| 国产成人一区二区三区电影| 综合久久亚洲| 免费看的黄色网| 亚洲精品av在线播放| 高清一区二区|