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

使用Axios 攔截器解決「 前端并發(fā)沖突 」 問題

開發(fā) 前端
本文將討論前端如何利用 axios 的攔截器過濾重復請求,解決并發(fā)沖突。

背景

并發(fā)沖突問題, 是日常開發(fā)中一個比較常見的問題。

不同用戶在較短時間間隔內變更數(shù)據(jù),或者某一個用戶進行的重復提交操作都可能導致并發(fā)沖突。

并發(fā)場景在開發(fā)和測試階段難以排查全面,出現(xiàn)線上 bug 以后定位困難,因此做好并發(fā)控制是前后端開發(fā)過程中都需要重視的問題。

對于同一用戶短時間內重復提交數(shù)據(jù)的問題,前端通常可以先做一層攔截。

本文將討論前端如何利用 axios 的攔截器過濾重復請求,解決并發(fā)沖突。

一般的處理方式 — 每次發(fā)請求添加 loading

在嘗試 axios 攔截器之前,先看看我們之前業(yè)務是怎么處理并發(fā)沖突問題的:

每次用戶操作頁面上的控件(輸入框、按鈕等),向后端發(fā)送請求的時候,都給頁面對應的控件添加 loading 效果,提示正在進行數(shù)據(jù)加載,同時也阻止 loading 效果結束前用戶繼續(xù)操作控件。

這是最直接有效的方式,如果你們前端團隊成員足夠細心耐心,擁有良好的編碼習慣,這樣就可以解決大部分用戶不小心重復提交帶來的并發(fā)問題了。

更優(yōu)的解決方案:axios 攔截器統(tǒng)一處理

項目中需要前端限制并發(fā)的場景這么多,我們當然要思考更優(yōu)更省事的方案。

既然是在每次發(fā)送請求的時候進行并發(fā)控制,那如果能重新封裝下發(fā)請求的公共函數(shù),統(tǒng)一處理重復請求實現(xiàn)自動攔截,就可以大大簡化我們的業(yè)務代碼。

項目使用的 axios 庫來發(fā)送 http 請求,axios 官方為我們提供了豐富的 API,我們來看看攔截請求需要用到的兩個核心 API:

1. interceptors

攔截器包括請求攔截器和響應攔截器,可以在請求發(fā)送前或者響應后進行攔截處理,用法如下:

  1. // 添加請求攔截器 
  2. axios.interceptors.request.use(function (config) { 
  3.   // 在發(fā)送請求之前做些什么 
  4.   return config; 
  5. }, function (error) { 
  6.   // 對請求錯誤做些什么 
  7.   return Promise.reject(error); 
  8. }); 
  9.  
  10. // 添加響應攔截器 
  11. axios.interceptors.response.use(function (response) { 
  12.     // 對響應數(shù)據(jù)做點什么 
  13.     return response; 
  14.   }, function (error) { 
  15.     // 對響應錯誤做點什么 
  16.     return Promise.reject(error); 
  17.   }); 

2. cancel token:

調用 cancel token API 可以取消請求。

官網(wǎng)提供了兩種方式來構建 cancel token,我們采用這種方式:

通過傳遞一個 executor 函數(shù)到 CancelToken 的構造函數(shù)來創(chuàng)建 cancel token,方便在上面的請求攔截器中檢測到重復請求可以立即執(zhí)行:

  1. const CancelToken = axios.CancelToken; 
  2. let cancel; 
  3.  
  4. axios.get('/user/12345', { 
  5.   cancelToken: new CancelToken(function executor(c) { 
  6.     // executor 函數(shù)接收一個 cancel 函數(shù)作為參數(shù) 
  7.     cancel = c; 
  8.   }) 
  9. }); 
  10.  
  11. // cancel the request 
  12. cancel(); 

本文提供的思路就是利用 axios interceptors API 攔截請求,檢測是否有多個相同的請求同時處于 pending 狀態(tài),如果有就調用 cancel token API 取消重復的請求。

假如用戶重復點擊按鈕,先后提交了 A 和 B 這兩個完全相同(考慮請求路徑、方法、參數(shù))的請求,我們可以從以下幾種攔截方案中選擇其一:

  • 取消 A 請求,只發(fā)出 B 請求
  • 取消 B 請求,只發(fā)出 A 請求
  • 取消 B 請求,只發(fā)出 A 請求,把收到的 A 請求的返回結果也作為 B 請求的返回結果

第三種方案需要做監(jiān)聽處理增加了復雜性,結合我們實際的業(yè)務需求,最后采用了第二種方案來實現(xiàn),即:

只發(fā)第一個請求。在 A 請求還處于 pending 狀態(tài)時,后發(fā)的所有與 A 重復的請求都取消,實際只發(fā)出 A 請求,直到 A 請求結束(成功/失敗)才停止對這個請求的攔截。

具體實現(xiàn)

1.存儲所有 pending 狀態(tài)的請求

首先我們要將項目中所有的 pending 狀態(tài)的請求存儲在一個變量中,叫它 pendingRequests,

可以通過把 axios 封裝為一個單例模式的類,或者定義全局變量,來保證 pendingRequests變量在每次發(fā)送請求前都可以訪問,并檢查是否為重復的請求。

  1. let pendingRequests = new Map() 

把每個請求的方法、url 和參數(shù)組合成一個字符串,作為標識該請求的唯一 key,同時也是 pendingRequests 對象的 key:

  1. const requestKey = `${config.url}/${JSON.stringify(config.params)}/${JSON.stringify(config.data)}&request_type=${config.method}`; 

幫助理解的小 tips:

  • 定義 pendingRequests 為 map 對象的目的是為了方便我們查詢它是否包含某個 key,以及添加和刪除 key。添加 key 時,對應的 value 可以設置用戶自定義的一些功能參數(shù),后面擴展功能的時候會用到。
  • config 是 axios 攔截器中的參數(shù),包含當前請求的信息

2.在請求發(fā)出前檢查當前請求是否重復

在請求攔截器中,生成上面的 requestKey,檢查 pendingRequests 對象中是否包含當前請求的 requestKey

  • 有:說明是重復的請求,cancel 掉當前請求
  • 沒有:把 requestKey 添加到 pendingRequests 對象中

因為后面的響應攔截器中還要用到當前請求的 requestKey,為了避免踩坑,最好不要再次生成。

在這一步就把 requestKey 存回 axios 攔截器的 config 參數(shù)中,后面可以直接在響應攔截器中通過 response.config.requestKey 取到。

代碼示例:

  1. // 請求攔截器 
  2. axios.interceptors.request.use( 
  3.   (config) => { 
  4.     if (pendingRequests.has(requestKey)) { 
  5.       config.cancelToken = new axios.CancelToken((cancel) => { 
  6.         // cancel 函數(shù)的參數(shù)會作為 promise 的 error 被捕獲 
  7.         cancel(`重復的請求被主動攔截: ${requestKey}`); 
  8.       }); 
  9.     } else { 
  10.       pendingRequests.set(requestKey, config); 
  11.       config.requestKey = requestKey; 
  12.     } 
  13.     return config; 
  14.   }, 
  15.   (error) => { 
  16.     // 這里出現(xiàn)錯誤可能是網(wǎng)絡波動造成的,清空 pendingRequests 對象 
  17.     pendingRequests.clear(); 
  18.     return Promise.reject(error); 
  19.   } 
  20. ); 

3.在請求返回后維護 pendingRequests 對象

如果請求順利走到了響應攔截器這一步,說明這個請求已經(jīng)結束了 pending 狀態(tài),那我們要把它從 pendingRequests 中除名:

  1. axios.interceptors.response.use((response) => { 
  2.   const requestKey = response.config.requestKey; 
  3.   pendingRequests.delete(requestKey); 
  4.   return Promise.resolve(response); 
  5. }, (error) => { 
  6.   if (axios.isCancel(error)) { 
  7.     console.warn(error); 
  8.     return Promise.reject(error); 
  9.   } 
  10.   pendingRequests.clear(); 
  11.   return Promise.reject(error); 
  12. }) 

4.需要清空 pendingRequests 對象的場景

遇到網(wǎng)絡波動或者超時等情況造成請求錯誤時,需要清空原來存儲的所有 pending 狀態(tài)的請求記錄,在上面演示的代碼已經(jīng)作了注釋說明。

此外,頁面切換時也需要清空之前緩存的 pendingRequests 對象,可以利用 Vue Router 的 beforeEach 鉤子:

  1. router.beforeEach((tofromnext) => { 
  2.   request.clearRequestList(); 
  3.   next(); 
  4. }); 

功能擴展

1.統(tǒng)一處理接口報錯提示

與后端約定好接口返回數(shù)據(jù)的格式,對接口報錯的情況,可以統(tǒng)一在響應攔截器中添加 toast 給用戶提示,

對于特殊的不需要報錯的接口,可以設置一個參數(shù)存入 axios 攔截器的 config 參數(shù)中,過濾掉報錯提示:

  1. // 接口返回 retcode 不為 0 時需要報錯,請求設置了 noError 為 true 則這個接口不報錯  
  2. if ( 
  3.   response.data.retcode && 
  4.   !response.config.noError 
  5. ) { 
  6.   if (response.data.message) { 
  7.     Vue.prototype.$message({ 
  8.       showClose: true
  9.       message: response.data.message, 
  10.       type: 'error'
  11.     }); 
  12.   } 
  13.   return Promise.reject(response.data); 

2.發(fā)送請求時給控件添加 loading 效果

上面利用 axios interceptors 過濾重復請求時,可以在控制臺拋出信息給開發(fā)者提示,在這個基礎上如果能給頁面上操作的控件添加 loading 效果就會對用戶更友好。

常見的 ui 組件庫都有提供 loading 服務,可以指定頁面上需要添加 loading 效果的控件。下面是以 element UI 為例的示例代碼:

  1. // 給 loadingTarget 對應的控件添加 loading 效果,儲存 loadingService 實例 
  2. addLoading(config) { 
  3.   if (!document.querySelector(config.loadingTarget)) return
  4.   config.loadingService = Loading.service({ 
  5.     target: config.loadingTarget, 
  6.   }); 
  7.  
  8. // 調用 loadingService 實例的 close 方法關閉對應元素的 loading 效果 
  9. closeLoading(config) { 
  10.   config.loadingService && config.loadingService.close(); 

與上面過濾報錯方式類似,發(fā)請求的時候將元素的 class name 或 id 存入 axios 攔截器的 config 參數(shù)中,

在請求攔截器中調用 addLoading 方法, 響應攔截器中調用 closeLoading 方法,就可以實現(xiàn)在請求 pending 過程中指定控件(如 button) loading,請求結束后控件自動取消 loading 效果。

支持多個攔截器組合使用

簡單看下 axios interceptors 部分實現(xiàn)源碼可以理解,它支持定義多個 interceptors,所以只要我們定義的 interceptors 符合 Promise.then 鏈式調用的規(guī)范,還可以添加更多功能:

  1. this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) { 
  2.   chain.unshift(interceptor.fulfilled, interceptor.rejected); 
  3. }); 
  4.  
  5. this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) { 
  6.   chain.push(interceptor.fulfilled, interceptor.rejected); 
  7. }); 
  8.  
  9. while (chain.length) { 
  10.   promise = promise.then(chain.shift(), chain.shift()); 

總結

并發(fā)問題很常見,處理起來又相對繁瑣,前端解決并發(fā)沖突時,可以利用 axios 攔截器統(tǒng)一處理重復請求,簡化業(yè)務代碼。

同時 axios 攔截器支持更多應用,本文提供了部分常用擴展功能的實現(xiàn),感興趣的同學可以繼續(xù)挖掘補充攔截器的其他用法。

今天的內容就這么多,希望對你有幫助。

 

責任編輯:姜華 來源: 前端皮小蛋
相關推薦

2009-06-24 16:00:00

2009-09-27 17:37:32

Hibernate攔截

2025-02-28 08:14:53

2023-09-05 08:58:07

2011-05-16 10:14:11

Hibernate

2009-07-08 17:02:11

JDK實現(xiàn)調用攔截器

2025-05-09 08:20:50

2011-11-21 14:21:26

SpringMVCJava框架

2022-09-28 12:39:46

axios攔截器

2025-07-15 02:00:00

2009-06-25 15:54:42

Struts2教程攔截器

2020-03-25 17:55:30

SpringBoot攔截器Java

2012-02-03 13:27:16

2009-02-04 14:19:38

2013-11-04 09:35:38

Firefox插件攔截FLASH

2009-11-13 15:27:12

無線路由器

2023-03-10 19:36:47

2009-06-25 15:59:21

Struts2教程攔截器

2009-05-19 16:55:17

IE攔截器惡意軟件卡巴斯基

2024-12-27 08:39:10

點贊
收藏

51CTO技術棧公眾號

日本人妻伦在线中文字幕| 日韩在线视频观看| 久久国产精品视频在线观看| 黑人操亚洲女人| 亚洲手机视频| 亚洲美女福利视频网站| 中文字幕视频在线免费观看| 欧美成人hd| 丁香婷婷深情五月亚洲| 欧美性做爰毛片| 2017亚洲天堂| 高潮久久久久久久久久久久久久| 国产精品久久久久久久岛一牛影视| 欧美有码在线观看视频| 亚洲精品国产精品国自| 成人在线日韩| 欧美日韩激情网| 亚洲高清在线播放| 六月婷婷中文字幕| 秋霞av亚洲一区二区三| 欧美日本高清视频| 日韩一级av毛片| 日韩一区免费| 欧美在线观看禁18| 久久亚洲国产成人精品无码区| 91国内精品久久久| 亚洲高清二区| 日韩在线免费av| 免费不卡av网站| 日本中文字幕视频在线| 不卡欧美aaaaa| 国产伊人精品在线| 国产午夜免费福利| 欧美视频一区| 久久好看免费视频| 日韩精品电影一区二区| 99久久免费精品国产72精品九九| 亚洲精品伦理在线| 成人av蜜桃| 在线免费看91| 久久精品动漫| 97福利一区二区| 久草国产在线视频| 色婷婷色综合| 日韩电影免费观看在线观看| 先锋资源在线视频| 日韩福利在线观看| 色噜噜狠狠成人网p站| 欧美中文字幕在线观看视频| 成年人黄视频在线观看| 国产精品乱码人人做人人爱| 免费在线观看一区二区| 国产91麻豆视频| 国产九色精品成人porny| 国产精品激情av在线播放 | 久久国产麻豆精品| 欧美一级在线播放| 国产黄a三级三级| 精品久久久亚洲| 亚洲精品不卡在线| 韩国av中国字幕| 亚洲一区二区三区日本久久九| 亚洲妇熟xx妇色黄| 亚欧精品在线| 国产视频第一区| 久久久国际精品| 欧美一区观看| 九色视频成人自拍| 久久久久亚洲综合| 欧美影视一区二区| 国产精品一区二区婷婷| 国产人久久人人人人爽| 日本精品免费| 在线免费看a| 国产精品女主播av| 国产精品久久久一区二区三区| 久久一区二区三区视频| 久久精品播放| 久久激情五月丁香伊人| 欧美a级片免费看| 亚洲网色网站| 欧美精品videos另类日本| 国产无遮挡又黄又爽| 久久在线播放| 日韩中文字幕在线视频播放| 小泽玛利亚一区| 91久久国产| 久久久免费观看视频| 91video| 久久婷婷麻豆| 国产日韩欧美电影在线观看| 国产精品一区二区黑人巨大| 东方欧美亚洲色图在线| 国产一区二区三区奇米久涩| 蝌蚪视频在线播放| 不卡视频免费播放| 日韩欧美在线一区二区| 97视频在线观看网站| 日本一区二区三区四区在线视频| 精品日本一区二区三区| va婷婷在线免费观看| 成人精品免费看| 欧美日韩精品免费看| 午夜视频成人| 午夜私人影院久久久久| 又色又爽又高潮免费视频国产| 超碰在线cao| 欧美少妇bbb| 亚洲av综合色区无码另类小说| 日韩精品一级毛片在线播放| 日韩欧美久久久| 久久久久久亚洲中文字幕无码| 美日韩黄色大片| 在线免费看av不卡| 久久这里只有精品免费| 日日夜夜免费精品| 国产不卡在线观看| 日韩黄色在线视频| 在线看片日韩| 国产精品入口日韩视频大尺度| 一二三区免费视频| 天堂午夜影视日韩欧美一区二区| 91国内在线视频| 国产精品国产精品国产| yourporn久久国产精品| 亚洲欧美99| 亚洲黄色网址| 欧美一区二区三区视频在线观看| www.51色.com| 精品视频一区二区三区| 亚洲精品资源美女情侣酒店| 日韩欧美综合视频| 日韩成人精品在线观看| 黄色国产精品一区二区三区| 免费a级在线播放| 亚洲欧美日韩国产一区二区三区| 亚洲一区二区三区四区中文| 538在线视频| 日韩一区二区在线看| 亚洲ⅴ国产v天堂a无码二区| 日韩视频一区| 国产日韩欧美亚洲一区| dj大片免费在线观看| 欧美最新大片在线看| 亚洲一区二区三区无码久久| 国产在线欧美| 亚洲xxxxx电影| 日本成人网址| 欧美日韩成人综合在线一区二区| 日本人dh亚洲人ⅹxx| 欧美专区一区| 久久亚洲精品视频| 影音先锋国产在线| 国产欧美精品一区二区三区四区 | 美女福利视频在线| 成人做爰免费视频免费看| 9191精品国产综合久久久久久| 台湾佬美性中文| 7777久久香蕉成人影院| 国产美女精品视频| 成全电影播放在线观看国语| 色婷婷综合久久久久中文| 黑丝av在线播放| 一区二区三区国产盗摄| 国产一区精品视频| 国产在线视频福利| 日本精品视频一区二区三区| 少妇精品一区二区三区| 国产日韩一区二区三区在线播放| 国产精品亚洲网站| 欧美特黄一级视频| 亚洲国产日韩在线一区模特| 色哟哟无码精品一区二区三区| 欧美亚洲国产日韩| 国产国产精品人在线视| 福利视频在线看| 91精品福利在线一区二区三区| 黑人巨大精品欧美| 天堂资源在线中文精品| 五码日韩精品一区二区三区视频| 伊人福利在线| 欧美变态tickling挠脚心| 中文字幕在线1| 日本不卡视频在线| 懂色av粉嫩av蜜臀av| 这里视频有精品| 午夜精品久久久久久久久久久久久| 国产理论片在线观看| 夜夜亚洲天天久久| 欧美狂猛xxxxx乱大交3| 久久精品av麻豆的观看方式| 老汉色影院首页| 欧美久久精品| 国产精品免费久久久久影院| 丰满岳乱妇国产精品一区| 中文字幕日本乱码精品影院| 爱情岛论坛亚洲自拍| 99久久婷婷| 国产伦精品一区二区三区四区视频 | 欧美大片网站在线观看 | 欧美日韩在线一区| 天堂av网手机版| 国产精品77777竹菊影视小说| 久久精品一二三区| 国产精品原创| 中文字幕亚洲自拍| 久久精品国产亚洲av麻豆蜜芽| 99国产精品久久久| 日本xxxx黄色| 日韩毛片视频| 国产精品久久久久久久久久久久午夜片| 亚洲电影视频在线| 亚洲乱码一区av黑人高潮| 一级久久久久久| 国产农村妇女精品| 精品人妻一区二区免费| 免费成人性网站| www.国产在线视频| 欧洲杯足球赛直播| 国产精品免费看一区二区三区| 成年人黄视频在线观看| 日韩三级精品电影久久久| 欧美精品韩国精品| 怡红院av一区二区三区| 永久免费av无码网站性色av| 成人免费视频免费观看| 国产一二三区av| 新狼窝色av性久久久久久| 国产日韩欧美大片| 欧美一级淫片| 久热国产精品视频一区二区三区| 黄毛片在线观看| 欧美大片在线看免费观看| 天堂аⅴ在线地址8| 亚洲男人的天堂网站| 亚洲国产精品suv| 欧美日韩国产区一| 老熟妇一区二区三区| 国产精品短视频| www.av欧美| 国产电影一区在线| 亚洲天堂伊人网| 青草av.久久免费一区| 老熟妇仑乱视频一区二区| 亚洲黄色一区| 精品视频在线观看一区| 九九热线有精品视频99| 国产日韩二区| japanese色系久久精品| 91手机视频在线观看| 亚瑟国产精品| 成人精品网站在线观看| 久久久精品一区二区毛片免费看| 超碰97人人做人人爱少妇| 91精彩视频在线播放| 亚洲新声在线观看| 粉嫩av在线播放| 国产亚洲一区二区精品| www亚洲人| 视频在线观看99| 香蕉视频在线看| 日日狠狠久久偷偷四色综合免费| www.五月婷婷| 精品久久久久久久久久久久久久久久久| 久久久久99精品成人片我成大片| 国产精品国产三级国产aⅴ中文 | 精品欧美一区二区久久久| 91视频.com| 精品人妻无码一区二区三区换脸 | 欧美激情va永久在线播放| 精品国产丝袜高跟鞋| 亚洲精品永久免费| 国产丰满美女做爰| 狠狠躁天天躁日日躁欧美| 国产超碰人人爽人人做人人爱| 国产精品的网站| 国产激情无码一区二区三区| 一区二区三区蜜桃| 国产第一页第二页| 亚洲大型综合色站| 天天干天天干天天干天天| 一本久久精品一区二区| 中国女人一级一次看片| 午夜国产精品一区| 日本黄色小说视频| 亚洲成人tv网| 国产成人无码精品久在线观看| 亚洲色图清纯唯美| 丰满少妇一区二区三区| 久久免费国产精品| 美女100%无挡| 国产日韩av一区二区| 极品魔鬼身材女神啪啪精品| 亚洲午夜精品一区二区三区他趣| 日本裸体美女视频| 一区二区三区日韩在线观看| 性无码专区无码| 91久久精品网| 国产高潮流白浆喷水视频| 亚洲精品videossex少妇| 猫咪在线永久网站| 裸体女人亚洲精品一区| 老司机深夜福利在线观看| 欧美大秀在线观看| 高清电影一区| 成人一区二区三区四区| 国产欧美日韩在线一区二区| 久久精品综合一区| 精品欧美午夜寂寞影院| 亚洲欧洲一区二区福利| 精品福利av| 粉色视频免费看| 黄色免费福利视频| 在线观看欧美理论a影院| 一区二区三区四区欧美| 夜夜春成人影院| 免费不卡亚洲欧美| 91精品国产自产在线观看永久∴ | 人体内射精一区二区三区| 久久综合九色| 美女黄色片视频| 成人免费视频视频在线观看免费 | 欧美午夜寂寞影院| 天天操天天干天天| 国产视频精品xxxx| 成人免费观看视频大全| 日韩av免费网站| 涩爱av色老久久精品偷偷鲁| 97se视频在线观看| 精品视频亚洲| 搡女人真爽免费午夜网站| 91丨porny丨国产| 国产成人愉拍精品久久| 精品不卡在线视频| 国产探花视频在线观看| 欧美中文在线字幕| 涩涩涩久久久成人精品| 亚洲欧美日韩另类精品一区二区三区| 欧美福利专区| 国产在线视频三区| 最新不卡av在线| 国产成人精品无码高潮| 欧美成人黑人xx视频免费观看| 玖玖在线播放| 久久国产精品亚洲va麻豆| 久久久久亚洲| 国产探花在线观看视频| 亚洲人精品午夜| www久久久com| 性色av香蕉一区二区| 九九热hot精品视频在线播放| 热这里只有精品| 国产成人精品一区二区三区四区| 影音先锋制服丝袜| 欧美日本韩国一区二区三区视频| 婷婷开心激情网| 日本不卡免费高清视频| 欧美精选一区二区三区| 蜜臀一区二区三区精品免费视频| 91社区在线播放| 日本熟妇成熟毛茸茸| 91麻豆精品国产自产在线| a视频在线免费看| 国产伦精品一区二区三区四区免费 | 国产喷水在线观看| 日韩亚洲欧美在线观看| 成年人国产在线观看| 就去色蜜桃综合| 九九在线精品视频| 麻豆一区产品精品蜜桃的特点| 在线91免费看| 1234区中文字幕在线观看| 免费在线观看91| 韩国av一区二区| 日韩大片免费在线观看| 中文字幕欧美国内| 午夜久久av| 国产精品亚洲αv天堂无码| 不卡高清视频专区| 九九视频免费看| 日韩av在线网站| 欧美一级网址| 国产午夜福利100集发布| 丰满白嫩尤物一区二区| 久久久久亚洲AV成人| 日韩国产精品亚洲а∨天堂免| 国产精品xx| 中文字幕日韩精品一区二区| 99视频一区二区| 91丨porny丨在线中文 | 亚洲 国产 日韩 综合一区| 国产一区二区伦理| 成年人二级毛片| 欧美成人精品高清在线播放| 日韩免费va| 2018中文字幕第一页| 国产精品久久久久久户外露出| 中文字幕一区二区三区四区视频| 国产亚洲a∨片在线观看| 91久久精品无嫩草影院|