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

理解JavaScript的async/await

開發(fā) 前端
任意一個名稱都是有意義的,先從字面意思來理解。async 是“異步”的簡寫,而 await 可以認為是 async wait 的簡寫。所以應(yīng)該很好理解 async 用于申明一個 function 是異步的,而 await 用于等待一個異步方法執(zhí)行完成。另外還有一個很有意思的語法規(guī)定,await 只能出現(xiàn)在 async 函數(shù)中。

[[176832]]

隨著 Node 7 的發(fā)布,越來越多的人開始研究據(jù)說是異步編程終級解決方案的 async/await。我***次看到這組關(guān)鍵字并不是在 JavaScript 語言里,而是在 c# 5.0 的語法中。C# 的 async/await 需要在 .NET Framework 4.5 以上的版本中使用,因此我還很悲傷了一陣——為了要兼容 XP 系統(tǒng),我們開發(fā)的軟件不能使用高于 4.0 版本的 .NET Framework。

我之前在《閑談異步調(diào)用“扁平”化》 中就談到了這個問題。無論是在 C# 還是 JavaScript 中,async/await 都是非常棒的特性,它們也都是非常甜的語法糖。C# 的 async/await 實現(xiàn)離不開 Task 或 Task<Result> 類,而 JavaScript 的 async/await 實現(xiàn),也離不開Promise。

現(xiàn)在拋開 C# 和 .NET Framework,專心研究下 JavaScript 的 async/await。

async 和 await 在干什么

任意一個名稱都是有意義的,先從字面意思來理解。async 是“異步”的簡寫,而 await 可以認為是 async wait 的簡寫。所以應(yīng)該很好理解 async 用于申明一個 function 是異步的,而 await 用于等待一個異步方法執(zhí)行完成。

另外還有一個很有意思的語法規(guī)定,await 只能出現(xiàn)在 async 函數(shù)中。然后細心的朋友會產(chǎn)生一個疑問,如果 await 只能出現(xiàn)在 async 函數(shù)中,那這個 async 函數(shù)應(yīng)該怎么調(diào)用?

如果需要通過 await 來調(diào)用一個 async 函數(shù),那這個調(diào)用的外面必須得再包一個 async 函數(shù),然后……進入死循環(huán),永無出頭之日……

如果 async 函數(shù)不需要 await 來調(diào)用,那 async 到底起個啥作用?

async 起什么作用

這個問題的關(guān)鍵在于,async 函數(shù)是怎么處理它的返回值的!

我們當(dāng)然希望它能直接通過 return 語句返回我們想要的值,但是如果真是這樣,似乎就沒 await 什么事了。所以,寫段代碼來試試,看它到底會返回什么:

  1. async function testAsync() { 
  2.     return "hello async"
  3.  
  4. const result = testAsync(); 
  5. console.log(result);  

看到輸出就恍然大悟了——輸出的是一個 Promise 對象。

  1. c:\var\test> node --harmony_async_await . 
  2. Promise { 'hello async' }  

所以,async 函數(shù)返回的是一個 Promise 對象。從文檔中也可以得到這個信息。async 函數(shù)(包含函數(shù)語句、函數(shù)表達式、Lambda表達式)會返回一個 Promise 對象,如果在函數(shù)中 return 一個直接量,async 會把這個直接量通過 Promise.resolve() 封裝成 Promise 對象。

async 函數(shù)返回的是一個 Promise 對象,所以在最外層不能用 await 獲取其返回值的情況下,我們當(dāng)然應(yīng)該用原來的方式:then() 鏈來處理這個 Promise 對象,就像這樣

  1. testAsync().then(v => { 
  2.     console.log(v);    // 輸出 hello async 
  3. });  

現(xiàn)在回過頭來想下,如果 async 函數(shù)沒有返回值,又該如何?很容易想到,它會返回 Promise.resolve(undefined)。

聯(lián)想一下 Promise 的特點——無等待,所以在沒有 await 的情況下執(zhí)行 async 函數(shù),它會立即執(zhí)行,返回一個 Promise 對象,并且,絕不會阻塞后面的語句。這和普通返回 Promise 對象的函數(shù)并無二致。

那么下一個關(guān)鍵點就在于 await 關(guān)鍵字了。

await 到底在等啥

一般來說,都認為 await 是在等待一個 async 函數(shù)完成。不過按語法說明,await 等待的是一個表達式,這個表達式的計算結(jié)果是 Promise 對象或者其它值(換句話說,就是沒有特殊限定)。

因為 async 函數(shù)返回一個 Promise 對象,所以 await 可以用于等待一個 async 函數(shù)的返回值——這也可以說是 await 在等 async 函數(shù),但要清楚,它等的實際是一個返回值。注意到 await 不僅僅用于等 Promise 對象,它可以等任意表達式的結(jié)果,所以,await 后面實際是可以接普通函數(shù)調(diào)用或者直接量的。所以下面這個示例完全可以正確運行

  1. function getSomething() { 
  2.     return "something"
  3.  
  4. async function testAsync() { 
  5.     return Promise.resolve("hello async"); 
  6.  
  7. async function test() { 
  8.     const v1 = await getSomething(); 
  9.     const v2 = await testAsync(); 
  10.     console.log(v1, v2); 
  11.  
  12. test();  

await 等到了要等的,然后呢

await 等到了它要等的東西,一個 Promise 對象,或者其它值,然后呢?我不得不先說,await 是個運算符,用于組成表達式,await 表達式的運算結(jié)果取決于它等的東西。

如果它等到的不是一個 Promise 對象,那 await 表達式的運算結(jié)果就是它等到的東西。

如果它等到的是一個 Promise 對象,await 就忙起來了,它會阻塞后面的代碼,等著 Promise 對象 resolve,然后得到 resolve 的值,作為 await 表達式的運算結(jié)果。

看到上面的阻塞一詞,心慌了吧……放心,這就是 await 必須用在 async 函數(shù)中的原因。async 函數(shù)調(diào)用不會造成阻塞,它內(nèi)部所有的阻塞都被封裝在一個 Promise 對象中異步執(zhí)行。

async/await 幫我們干了啥

作個簡單的比較

上面已經(jīng)說明了 async 會將其后的函數(shù)(函數(shù)表達式或 Lambda)的返回值封裝成一個 Promise 對象,而 await 會等待這個 Promise 完成,并將其 resolve 的結(jié)果返回出來。

現(xiàn)在舉例,用 setTimeout 模擬耗時的異步操作,先來看看不用 async/await 會怎么寫

  1. function takeLongTime() { 
  2.     return new Promise(resolve => { 
  3.         setTimeout(() => resolve("long_time_value"), 1000); 
  4.     }); 
  5.  
  6. takeLongTime().then(v => { 
  7.     console.log("got", v); 
  8. });  

如果改用 async/await 呢,會是這樣

  1. function takeLongTime() { 
  2.     return new Promise(resolve => { 
  3.         setTimeout(() => resolve("long_time_value"), 1000); 
  4.     }); 
  5.  
  6. async function test() { 
  7.     const v = await takeLongTime(); 
  8.     console.log(v); 
  9.  
  10. test();  

眼尖的同學(xué)已經(jīng)發(fā)現(xiàn) takeLongTime() 沒有申明為 async。實際上,takeLongTime() 本身就是返回的 Promise 對象,加不加 async結(jié)果都一樣,如果沒明白,請回過頭再去看看上面的“async 起什么作用”。

又一個疑問產(chǎn)生了,這兩段代碼,兩種方式對異步調(diào)用的處理(實際就是對 Promise 對象的處理)差別并不明顯,甚至使用 async/await 還需要多寫一些代碼,那它的優(yōu)勢到底在哪?

async/await 的優(yōu)勢在于處理 then 鏈

單一的 Promise 鏈并不能發(fā)現(xiàn) async/await 的優(yōu)勢,但是,如果需要處理由多個 Promise 組成的 then 鏈的時候,優(yōu)勢就能體現(xiàn)出來了(很有意思,Promise 通過 then 鏈來解決多層回調(diào)的問題,現(xiàn)在又用 async/await 來進一步優(yōu)化它)。

假設(shè)一個業(yè)務(wù),分多個步驟完成,每個步驟都是異步的,而且依賴于上一個步驟的結(jié)果。我們?nèi)匀挥?setTimeout 來模擬異步操作:

  1. /** 
  2.  * 傳入?yún)?shù) n,表示這個函數(shù)執(zhí)行的時間(毫秒) 
  3.  * 執(zhí)行的結(jié)果是 n + 200,這個值將用于下一步驟 
  4.  */ 
  5. function takeLongTime(n) { 
  6.     return new Promise(resolve => { 
  7.         setTimeout(() => resolve(n + 200), n); 
  8.     }); 
  9.  
  10. function step1(n) { 
  11.     console.log(`step1 with ${n}`); 
  12.     return takeLongTime(n); 
  13.  
  14. function step2(n) { 
  15.     console.log(`step2 with ${n}`); 
  16.     return takeLongTime(n); 
  17.  
  18. function step3(n) { 
  19.     console.log(`step3 with ${n}`); 
  20.     return takeLongTime(n); 
  21.  

現(xiàn)在用 Promise 方式來實現(xiàn)這三個步驟的處理 

  1. function doIt() { 
  2.     console.time("doIt"); 
  3.     const time1 = 300; 
  4.     step1(time1) 
  5.         .then(time2 => step2(time2)) 
  6.         .then(time3 => step3(time3)) 
  7.         .then(result => { 
  8.             console.log(`result is ${result}`); 
  9.             console.timeEnd("doIt"); 
  10.         }); 
  11.  
  12. doIt(); 
  13.  
  14. // c:\var\test>node --harmony_async_await . 
  15. // step1 with 300 
  16. // step2 with 500 
  17. // step3 with 700 
  18. // result is 900 
  19. // doIt: 1507.251ms  

輸出結(jié)果 result 是 step3() 的參數(shù) 700 + 200 = 900。doIt() 順序執(zhí)行了三個步驟,一共用了 300 + 500 + 700 = 1500 毫秒,和 console.time()/console.timeEnd() 計算的結(jié)果一致。

如果用 async/await 來實現(xiàn)呢,會是這樣 

  1. async function doIt() { 
  2.     console.time("doIt"); 
  3.     const time1 = 300; 
  4.     const time2 = await step1(time1); 
  5.     const time3 = await step2(time2); 
  6.     const result = await step3(time3); 
  7.     console.log(`result is ${result}`); 
  8.     console.timeEnd("doIt"); 
  9.  
  10. doIt();  

結(jié)果和之前的 Promise 實現(xiàn)是一樣的,但是這個代碼看起來是不是清晰得多,幾乎跟同步代碼一樣

還有更酷的

現(xiàn)在把業(yè)務(wù)要求改一下,仍然是三個步驟,但每一個步驟都需要之前每個步驟的結(jié)果。

  1. function step1(n) { 
  2.     console.log(`step1 with ${n}`); 
  3.     return takeLongTime(n); 
  4.  
  5. function step2(m, n) { 
  6.     console.log(`step2 with ${m} and ${n}`); 
  7.     return takeLongTime(m + n); 
  8.  
  9. function step3(k, m, n) { 
  10.     console.log(`step3 with ${k}, ${m} and ${n}`); 
  11.     return takeLongTime(k + m + n); 
  12.  

這回先用 async/await 來寫:

  1. async function doIt() { 
  2.     console.time("doIt"); 
  3.     const time1 = 300; 
  4.     const time2 = await step1(time1); 
  5.     const time3 = await step2(time1, time2); 
  6.     const result = await step3(time1, time2, time3); 
  7.     console.log(`result is ${result}`); 
  8.     console.timeEnd("doIt"); 
  9.  
  10. doIt(); 
  11.  
  12. // c:\var\test>node --harmony_async_await . 
  13. // step1 with 300 
  14. // step2 with 800 = 300 + 500 
  15. // step3 with 1800 = 300 + 500 + 1000 
  16. // result is 2000 
  17. // doIt: 2907.387ms  

除了覺得執(zhí)行時間變長了之外,似乎和之前的示例沒啥區(qū)別啊!別急,認真想想如果把它寫成 Promise 方式實現(xiàn)會是什么樣子?

  1. function doIt() { 
  2.     console.time("doIt"); 
  3.     const time1 = 300; 
  4.     step1(time1) 
  5.         .then(time2 => { 
  6.             return step2(time1, time2) 
  7.                 .then(time3 => [time1, time2, time3]); 
  8.         }) 
  9.         .then(times => { 
  10.             const [time1, time2, time3] = times; 
  11.             return step3(time1, time2, time3); 
  12.         }) 
  13.         .then(result => { 
  14.             console.log(`result is ${result}`); 
  15.             console.timeEnd("doIt"); 
  16.         }); 
  17.  
  18. doIt();  

有沒有感覺有點復(fù)雜的樣子?那一堆參數(shù)處理,就是 Promise 方案的死穴—— 參數(shù)傳遞太麻煩了,看著就暈!

洗洗睡吧

就目前來說,已經(jīng)理解 async/await 了吧?但其實還有一些事情沒提及——Promise 有可能 reject 啊,怎么處理呢?如果需要并行處理3個步驟,再等待所有結(jié)果,又該怎么處理呢?

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2024-09-02 14:12:56

2021-07-20 10:26:12

JavaScriptasyncawait

2014-07-15 10:31:07

asyncawait

2021-06-28 08:10:59

JavaScript異步編程

2021-06-07 09:44:10

JavaScript開發(fā)代碼

2023-10-08 10:21:11

JavaScriptAsync

2017-06-19 09:12:08

JavaScriptPromiseAsync

2024-06-25 08:33:48

2025-07-24 09:45:37

2012-07-22 15:59:42

Silverlight

2023-05-08 11:49:05

asyncawait場景

2020-06-02 10:09:59

JavaScript開發(fā) 可視化

2022-08-27 13:49:36

ES7promiseresolve

2017-04-10 15:57:10

AsyncAwaitPromise

2021-06-28 07:27:43

AwaitAsync語法

2024-12-30 08:22:35

2023-07-28 07:31:52

JavaScriptasyncawait

2017-08-02 14:17:08

前端asyncawait

2022-11-21 09:01:00

Swift并發(fā)結(jié)構(gòu)

2024-12-23 08:00:45

點贊
收藏

51CTO技術(shù)棧公眾號

国产剧情久久久| 91亚洲免费视频| 亚洲色图21p| 久久电影网站中文字幕| 久久国产精品久久国产精品| 日本少妇一级片| 成人勉费视频| 亚洲欧美视频在线观看| 国产精品视频一区二区三区经| 欧美videossex极品| 亚洲h色精品| 亚洲美女中文字幕| 日本特黄在线观看| 欧美影视资讯| 亚洲午夜三级在线| 亚洲一二三区精品| 天堂在线中文字幕| 国产成人自拍网| 日本中文字幕久久看| 久久久久久国产精品免费播放| 九九亚洲视频| 亚洲第一中文字幕在线观看| 日韩av在线中文| 久久sese| 亚洲成人一二三| 日本女人高潮视频| 91caoporn在线| 97精品国产露脸对白| 亚洲最大福利视频网| 伊人网站在线观看| 日韩精品成人一区二区在线| 97人人模人人爽人人喊中文字| 老司机成人免费视频| 国产探花在线精品一区二区| 亚洲精品xxxx| 免费不卡的av| 97久久精品| 欧美一区三区四区| 午夜视频在线网站| 亚洲综合视频| 欧美精品v日韩精品v韩国精品v| av五月天在线| 日韩制服诱惑| 欧美日韩一区国产| 亚欧在线免费观看| 久久精品五月天| 日韩大片免费观看| 亚洲一二三四在线| 国产乱人伦精品一区二区三区| 午夜视频在线| 国产精品护士白丝一区av| 午夜精品电影在线观看| 国产九色在线| 国产清纯白嫩初高生在线观看91| 欧美自拍资源在线| 国产一级网站视频在线| 国产亚洲欧美一级| 日韩精品久久久免费观看 | 第四色日韩影片| 亚洲欧美日韩人成在线播放| 激情五月五月婷婷| 色婷婷av在线| 五月天丁香久久| 国产欧美在线一区| 国产精品亚洲d| 欧美日韩免费在线视频| 国产美女18xxxx免费视频| 91国产一区| 欧美岛国在线观看| 青青草视频成人| jlzzjlzz亚洲女人| 久久在线免费观看视频| 国产在线免费视频| 视频一区欧美精品| 成人久久久久爱| 亚洲av无码片一区二区三区| av亚洲精华国产精华精| 青青成人在线| 黄色大片在线播放| 亚洲h精品动漫在线观看| 成人观看免费完整观看| 欧美日韩免费电影| 日韩欧美一级在线播放| 99久久免费看精品国产一区| 猛男gaygay欧美视频| 色视频www在线播放国产成人| 国产精品白嫩白嫩大学美女| 国产情侣一区| 成人久久久久久| 亚洲欧美日韩免费| 亚洲欧美综合在线精品| 丁香色欲久久久久久综合网| 韩国主播福利视频一区二区三区| 国产成人精品一区二区三区免费| 欧美日韩国产一中文字不卡| 美女一区二区三区视频| 永久免费精品视频| 揄拍成人国产精品视频| 国产一级中文字幕| 蜜桃视频一区二区| 久久久久网址| 在线你懂的视频| 在线视频观看一区| 亚洲精品乱码久久久久久蜜桃图片| 禁断一区二区三区在线| 欧美国产亚洲精品久久久8v| 天堂网一区二区| 国产91精品入口| 亚洲精品白虎| 成人免费网站视频| 亚洲成av人乱码色午夜| 992在线观看| 国产精品综合| 国产精品sss| 久热国产在线| 欧美亚洲日本国产| 超碰97在线资源站| 激情综合久久| 91视频网页| 一级毛片视频在线| 91国产视频在线观看| 免费观看污网站| 天天做综合网| 国产精品久久97| 五十路在线观看| 亚洲午夜免费福利视频| 婷婷激情综合五月天| 精品毛片免费观看| 欧美一区二区三区……| 四虎免费在线观看| 亚洲综合成人在线| 成人在线短视频| 久久伦理在线| 国产精品69精品一区二区三区| 亚洲 欧美 自拍偷拍| 一区二区国产盗摄色噜噜| 欧美国产日韩另类| 欧美成人自拍| 国产精品自拍网| av在线免费观看网站| 98精品久久久久久久| 欧美另类变人与禽xxxxx| 短视频在线观看| 精品999日本| 国产精品12| 9999在线视频| 欧美精品一区二区在线播放 | 亚洲美女在线一区| 日韩高清第一页| 首页国产精品| 国产欧美在线观看| 麻豆传媒视频在线观看| 欧美精品一二三区| 日本一二三区在线观看| 国产伦精品一区二区三区在线观看| 亚洲一区二区三区免费看| 国产91精品在线| 播播国产欧美激情| 国产麻豆91视频| 亚洲六月丁香色婷婷综合久久 | 国产喷水福利在线视频| 亚洲人成亚洲人成在线观看图片| 人人爽人人爽av| 中文字幕午夜精品一区二区三区| 91香蕉亚洲精品| 影音先锋中文在线视频| 精品国产一区二区精华| 永久免费无码av网站在线观看| 久久青草欧美一区二区三区| 人妻无码视频一区二区三区| 日韩情爱电影在线观看| 成人一区二区电影| 欧美1—12sexvideos| 亚洲国产欧美久久| 黄色片视频免费| 亚洲天堂免费在线观看视频| 中文字幕无人区二| 国产精品一页| 亚洲免费av网| 久久a爱视频| 国产精品激情av电影在线观看| 在线观看麻豆| 精品欧美一区二区久久| 在线观看 亚洲| 18成人在线观看| 制服丝袜av在线| 人人狠狠综合久久亚洲| 欧美日韩在线免费| 色婷婷狠狠18禁久久| 久久久久久久欧美精品| 欧美日韩视频免费在线观看| 国产 日韩 欧美 综合 一区| 日韩免费在线视频| 91福利国产在线观看菠萝蜜| 日韩av在线免费播放| 中文字幕一二区| 亚洲午夜久久久久久久久电影网| 国产肥白大熟妇bbbb视频| 国产美女视频91| 国产视频一区二区三区在线播放| 中国成人一区| 欧美日韩在线不卡一区| 精品99re| 国产成人精品久久久| 丝袜国产在线| 色老头一区二区三区| 同心难改在线观看| 日韩欧美高清一区| 中文字幕免费播放| 亚洲成人动漫在线观看| av黄色免费在线观看| 久久久综合网站| 欧洲熟妇的性久久久久久| 久久成人羞羞网站| 欧美日韩亚洲一二三| 亚洲国产精品第一区二区| 中文字幕中文字幕一区三区| 中文有码一区| 精品欧美国产| 黄色成人美女网站| 99热在线国产| 国产精品一区免费在线 | 99re视频精品| 免费黄色av网址| 精品一区二区三区影院在线午夜| 国产情侣av自拍| 日韩午夜电影| 50度灰在线观看| 亚洲一区色图| 在线观看日本一区| 日韩电影在线视频| 日韩国产美国| 精品日本12videosex| 久久人人九九| 夜色77av精品影院| 精品一区在线播放| 电影一区二区在线观看| 亚洲一区中文字幕在线观看| 天堂久久一区| 国产日韩欧美黄色| 国产成人a亚洲精v品无码| 精品日韩欧美一区| 欧美一区二区三区四区五区六区| 日韩美女毛片| 国产尤物99| 亚洲成aⅴ人片久久青草影院| 精品一区国产| 婷婷精品视频| 欧美极品一区二区| 神马影视一区二区| 色中色综合成人| 日韩精品一卡| 一本一道久久久a久久久精品91| 成人羞羞视频在线看网址| 日韩免费电影一区二区| 色婷婷色综合| 国产a级片免费看| 中文一区一区三区免费在线观看| 日本老太婆做爰视频| 精品动漫3d一区二区三区免费版| 免费特级黄色片| 欧美亚洲自偷自偷| 免费黄色日本网站| 麻豆久久久久久久| 国产精品嫩草影视| 成人av网在线| 少妇精品一区二区三区| 中文字幕av资源一区| 可以免费看av的网址| 亚洲图片欧美一区| 二区视频在线观看| 欧美三级一区二区| www.热久久| 精品偷拍一区二区三区在线看| 欧美日韩国产中文字幕在线| 尤物yw午夜国产精品视频明星| 黄色片网站在线| 午夜精品在线观看| 精品裸体bbb| 成人免费在线看片| 色婷婷狠狠五月综合天色拍 | 午夜不卡在线视频| 亚洲第一网站在线观看| 在线不卡一区二区| 日日躁夜夜躁白天躁晚上躁91| 亚洲天堂av女优| 午夜av在线播放| 欧美中文字幕第一页| 亚洲欧美一级| 精品视频一区在线| 91一区在线| 极品粉嫩国产18尤物| 免费视频一区二区| 欧美夫妇交换xxx| 国产精品无遮挡| 国产精品7777777| 欧美日韩国产系列| 天天操天天干天天干| 蜜臀av一级做a爰片久久| 手机在线视频你懂的| 美女诱惑黄网站一区| 中文字幕亚洲影院| 国产午夜精品一区二区三区四区 | 国产福利小视频在线| 欧美高跟鞋交xxxxxhd| 成人国产一区二区三区精品麻豆| 国产精品一区二区免费| 国产大片一区| 国产精品亚洲二区在线观看| 国产99久久久国产精品免费看| 免费看裸体网站| 精品日韩视频在线观看| 国产av一区二区三区精品| 伊人青青综合网站| 久草在线资源福利站| 亚洲自拍小视频| 成人免费电影网址| 91传媒久久久| 成人高清伦理免费影院在线观看| 国产一二三四视频| 在线看不卡av| 日韩a在线观看| 国外成人性视频| 日韩亚洲精品在线观看| 一本色道久久99精品综合| 日韩精品成人一区二区三区| 国产草草浮力影院| 午夜久久电影网| 亚洲精品久久久久久无码色欲四季| 久久久精品一区二区三区| 国精产品一区二区三区有限公司 | 久久一本综合| 少妇性l交大片| 久久精品水蜜桃av综合天堂| 久久夜靖品2区| 亚洲国产成人爱av在线播放| 2020国产在线视频| 99热在线播放| 国产综合精品| 秘密基地免费观看完整版中文| 依依成人精品视频| www.五月激情| 欧美日韩国产123| 亚洲高清在线一区| 日b视频免费观看| 国产成人午夜高潮毛片| 青青草手机视频在线观看| 欧美一区二区啪啪| sm国产在线调教视频| 3d蒂法精品啪啪一区二区免费| 欧美在线网址| 蜜桃视频无码区在线观看| 亚洲综合丁香婷婷六月香| 免费观看黄一级视频| 国a精品视频大全| 日本国产精品| 久久久久狠狠高潮亚洲精品| 久久久久久久久久看片| 中日精品一色哟哟| 久久亚洲春色中文字幕| 超碰成人在线免费| 无码精品a∨在线观看中文| 久久伊99综合婷婷久久伊| 一本久久a久久精品vr综合| 蜜臀91精品国产高清在线观看| 免费激情视频在线观看| 国产精品久久免费看| 国产精品久久影视| 欧美激情日韩图片| 青青草久久爱| 欧美三级午夜理伦三级富婆| 综合av第一页| 人妻精品一区二区三区| 青青草原一区二区| 香蕉av一区二区| 这里只有精品在线观看视频| 欧美性xxxxx极品娇小| yourporn在线观看视频| 亚洲xxx自由成熟| 久久亚洲二区| 日韩精品一区二区亚洲av性色| 欧美va天堂va视频va在线| 午夜影院在线播放| 国产盗摄视频在线观看| 99久久精品免费观看| 天天爱天天做天天爽| 久久亚洲精品中文字幕冲田杏梨 | 激情综合色播激情啊| 精品午夜福利视频| 国产亚洲美女久久| 成人高潮a毛片免费观看网站| wwwxxx黄色片| 亚洲免费观看高清完整版在线| 欧美日韩免费做爰大片| 91免费版黄色| 青草av.久久免费一区| 精品无码久久久久| 色哟哟亚洲精品一区二区| 青青草原在线亚洲| 国产999免费视频|