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

欧美韩日一区二区三区| 久久国产88| 欧美一区二区大片| 国产av第一区| 免费观看黄一级视频| av成人毛片| 亚洲女人天堂成人av在线| 大香煮伊手机一区| 国产福利视频在线观看| 成人一二三区视频| 国产成人自拍视频在线观看| 免费精品在线视频| 超碰在线一区| 色综合久久66| 四虎免费在线观看视频| 欧美熟女一区二区| 免费美女久久99| 欧美肥臀大乳一区二区免费视频| 精品夜夜澡人妻无码av| av在线国产精品| 红桃av永久久久| 伊甸园精品99久久久久久| 亚洲av无码一区二区三区dv| 香蕉久久国产| 美女精品视频一区| 91视频免费观看网站| 国产不卡精品| 色婷婷亚洲精品| 国产肉体ⅹxxx137大胆| 在线观看免费高清完整| 成人av午夜电影| 国产日本欧美在线观看| 久久99精品波多结衣一区| 亚洲精品一区二区在线看| 国产手机视频精品| 少妇搡bbbb搡bbb搡打电话| 91国内外精品自在线播放| 午夜成人免费电影| 美女av免费观看| 免费大片在线观看www| 久久亚洲精精品中文字幕早川悠里 | 一区二区三区四区在线播放| 日本欧洲国产一区二区| 欧日韩在线视频| 国产成人综合精品三级| 国产一区二区色| 亚洲精品一区二区二区| 国产精品精品软件男同| 阿v免费在线观看| av不卡免费电影| 成人免费观看网站| 国产精品热久久| 免费观看成人av| 国产ts一区二区| 99久在线精品99re8热| 国产一区亚洲| 欧美成人激情在线| 中国一级片在线观看| 日韩中文欧美| 日韩在线激情视频| 欧美日韩生活片| 欧美一级精品片在线看| 亚洲精品视频免费| 在线观看国产网站| 要久久爱电视剧全集完整观看| 日韩精品高清在线| 在线天堂www在线国语对白| 中文字幕区一区二区三| 欧美大片免费久久精品三p| 只有这里有精品| a在线免费观看| 一区二区三区精品在线观看| 91麻豆天美传媒在线| yellow91字幕网在线| 亚洲免费在线观看视频| 成人在线观看毛片| 97人人爽人人澡人人精品| 午夜精品久久久久久久| 国产网站免费在线观看| 奇米777日韩| 欧美影视一区在线| 91网址在线观看精品| 91蝌蚪精品视频| 日韩高清有码在线| 国产又大又粗又爽的毛片| 欧美丝袜一区| 久久夜色精品国产欧美乱| 欧美人妻精品一区二区三区| 亚洲精品一二| 国产国语videosex另类| 最近中文在线观看| 国产一区美女在线| 久久国产精品久久| 欧美日韩国产精品一区二区| 日韩成人在线免费视频| 欧美一级一区| 国产综合香蕉五月婷在线| 精品黑人一区二区三区国语馆| 白白色 亚洲乱淫| 欧美一区二区三区四区夜夜大片 | 精品国产第一页| 福利小视频在线观看| 成人欧美一区二区三区小说| 996这里只有精品| 天天免费亚洲黑人免费| 777奇米成人网| 北岛玲一区二区| 国产精品久久久久久麻豆一区软件| 欧美激情网站在线观看| 久久久久久av无码免费网站下载| 黄大色黄女片18免费| 99精品美女| 国内精品久久久久久久久| 国产精品久久久久久久久夜色| 加勒比av一区二区| 精品无人乱码一区二区三区的优势 | 91久久精品www人人做人人爽| 无码精品黑人一区二区三区| 国产精品美女久久久久久| 国产女主播自拍| 欧美大片网站| 精品中文视频在线| 青青草原免费观看| 免费日本视频一区| 久久久com| 激情av在线| 欧美日韩成人在线| 亚洲精品成人无码熟妇在线| 亚洲成av人片乱码色午夜| 国产91色在线播放| 黄色片一区二区三区| 国产精品超碰97尤物18| 国产97色在线 | 日韩| 久久影院资源站| 久久伊人色综合| 依依成人在线视频| 久久精品男人天堂av| 久久久亚洲国产精品| 国产精品一区二区三区av| 国产一区二区三区免费视频| 欧美三日本三级少妇99| 国产91精品久久久久久久网曝门 | 一区二区三区在线观看视频| 五月婷婷丁香综合网| 午夜欧洲一区| 91精品国产91久久| 国产成人三级在线观看视频| 亚洲欧美日韩中文字幕一区二区三区 | 91 在线视频观看| 欧美色图国产精品| 国产精品久久久久久久久久久久久 | 青青草精品在线| 91精品啪在线观看国产81旧版| 国产精品欧美日韩久久| 成人在线高清视频| 在线观看视频一区二区欧美日韩| 日韩片在线观看| 99人久久精品视频最新地址| 国内外成人免费视频| 丁香花在线高清完整版视频| 日韩精品一区二区三区中文不卡| 久久黄色免费网站| 粉嫩av一区二区三区在线播放| 国产黄色激情视频| 国产精品视频3p| 97人人模人人爽人人喊中文字| 午夜成人免费影院| 色哟哟一区二区| 成人黄色免费网址| 奇米在线7777在线精品 | 香蕉精品视频在线观看| 91亚洲精品一区二区| av网址在线| 精品嫩草影院久久| www成人在线| 久久综合国产精品| 天堂中文视频在线| а√天堂在线官网| 在线成人国产| 国产精品一区二区三区在线观| av3级在线| 日韩精品一区二区三区第95| 中文字幕免费观看| 国产精品情趣视频| 91人妻一区二区三区| 亚洲激精日韩激精欧美精品| 就去色蜜桃综合| 免费在线观看一区| 另类美女黄大片| 日韩中文字幕免费在线观看| 欧美色图在线视频| 在线观看日本黄色| 国产精品中文字幕欧美| 欧美一区二区中文字幕| 精品国产乱码久久久久久果冻传媒| 国产日韩专区在线| 黄页网站大全在线免费观看| 亚洲色图av在线| 国产精品爽爽久久久久久| 亚洲午夜久久久久久久久电影网 | 亚洲欧洲免费视频| 一区二区日韩视频| 亚洲18女电影在线观看| 青娱乐国产视频| 国产精品一区二区你懂的| 久久无码高潮喷水| 一二三区不卡| 欧美极品jizzhd欧美| 欧美a级大片在线| 国产a∨精品一区二区三区不卡| 粗大黑人巨茎大战欧美成人| 日韩精品视频在线免费观看| 国产三级小视频| 色综合天天综合网天天看片| 免费毛片在线播放免费| 日本一区二区三区四区在线视频| 国产成人精品一区二区在线小狼| 天堂影院一区二区| 久久国产午夜精品理论片最新版本| 精品国产一区二区三区久久久蜜臀 | 亚洲精品久久久久久久久久久久 | 国产一区免费在线观看| 亚洲国产91视频| 欧美亚洲成人免费| 影音先锋在线视频| 中文字幕欧美日韩| 飘雪影视在线观看免费观看 | 欧美123区| 欧美丰满少妇xxxx| 欧美黄色激情| 一本色道久久88综合日韩精品 | 日本免费高清一区| 久久黄色影视| 97视频资源在线观看| 日韩免费在线电影| 国产精品露脸自拍| 巨茎人妖videos另类| 久久久亚洲网站| 最新黄网在线观看| 久久亚洲精品毛片| 免费黄色网址在线观看| 亚洲天天在线日亚洲洲精| 神马久久久久久久久久| 日韩欧美另类在线| www.黄色片| 91精品啪在线观看国产60岁| 中文字幕免费播放| 欧美在线视频你懂得| 亚洲熟女综合色一区二区三区| 亚洲国产人成综合网站| 2018天天弄| 一区二区三区鲁丝不卡| 欧美黄色一区二区三区| 亚洲一区二区在线免费观看视频| 亚洲天堂一级片| 中文字幕综合网| 一区二区国产精品精华液| 亚洲天天做日日做天天谢日日欢| 东京热无码av男人的天堂| 国产精品免费网站在线观看| 四虎成人免费影院| 国产精品白丝在线| 免费成年人视频在线观看| 亚洲精品成人在线| 欧美国产日韩综合| 亚洲国产精品久久久久秋霞影院 | 欧美日韩国产精品一区二区三区四区| 日本午夜精品理论片a级app发布| 亚洲成人在线网站| 日本va欧美va国产激情| 一本一道久久a久久精品| 樱花视频在线免费观看| 欧美日韩视频专区在线播放| 97超碰人人草| 日韩你懂的在线观看| 男人天堂网在线视频| 精品亚洲一区二区三区在线播放| 男人天堂亚洲二区| xxx欧美精品| 另类视频在线| 欧美一区二区视频97| 成人观看免费视频| 国产a久久精品一区二区三区| 国产高清精品一区二区三区| 欧美电影在线观看完整版| 欧美国产二区| 久久久久久久久久久久久久| 日韩欧美不卡在线| 久久一区亚洲| 交换做爰国语对白| 成人免费电影视频| 1024手机在线观看你懂的| 日韩毛片高清在线播放| 国产性一乱一性一伧一色| 日韩欧美国产中文字幕| 国产精品无码久久久久成人app| 精品国产乱码久久久久久久| 精品久久av| 欧美wwwxxxx| 亚洲插插视频| 成人激情视频在线播放| 欧美综合自拍| 婷婷视频在线播放| 久久成人国产| 亚洲午夜精品在线观看| 国产午夜精品一区二区三区四区 | 亚洲AV无码精品自拍| 亚洲欧美日韩直播| 在线观看操人| 日韩美女主播视频| 亚洲天堂av资源在线观看| 视频一区视频二区视频| 亚洲承认在线| 成年人三级黄色片| wwwwww.欧美系列| 午夜剧场免费在线观看| 欧美午夜片在线免费观看| 国产特黄一级片| 亚洲人成伊人成综合网久久久| 在线电影福利片| 国产美女被下药99| 天堂成人娱乐在线视频免费播放网站| 熟女视频一区二区三区| 三级在线观看一区二区| 99精品一区二区三区无码吞精| 国产精品色在线| 国产一级免费视频| 精品粉嫩超白一线天av| 成人影欧美片| 国产精品久久久久久一区二区 | 欧洲毛片在线视频免费观看| 中文字幕九色91在线| caoporn视频在线观看| 成人中文字幕在线观看| 精品国精品国产自在久国产应用| 久草免费福利在线| 国产精品一区2区| www.com.av| 在线观看亚洲精品视频| 香蕉国产在线视频| 久久久久久一区二区三区 | 999成人网| 91日韩视频在线观看| 久久毛片高清国产| 久久久久久免费看| www.在线视频.com| 久久久99免费视频| 日韩一区中文| 色综合视频二区偷拍在线| 久久久国产精品一区二区中文| 亚洲香蕉中文网| 亚洲福利国产精品| 亚洲精品一区二区三区新线路| 九九热这里只有在线精品视| 国产精品一区免费在线 | 亚洲午夜久久久久中文字幕久| 国产99视频在线| 日韩亚洲第一页| 日韩国产一二三区| 日本福利视频导航| 国产一区亚洲一区| 欧美成人精品欧美一级| 日韩女优电影在线观看| 国内老司机av在线| 国产精品日韩高清| 国产亚洲在线| 97人妻精品一区二区免费| 色呦呦网站一区| 成年人在线看| 成人黄色网免费| 亚洲欧美综合国产精品一区| 视频在线观看免费高清| 亚洲欧洲综合另类| 国精产品乱码一区一区三区四区| 久久久久一本一区二区青青蜜月| 成人高潮a毛片免费观看网站| 黄页免费在线观看视频| 久久这里都是精品| 18国产免费视频| 另类视频在线观看| 国产精品45p| 国产日韩成人内射视频| 国产精品成人免费精品自在线观看| 人妻丰满熟妇aⅴ无码| 成人久久久久| 精品www久久久久奶水| 国产精品美女一区二区| 精品人妻一区二区三区含羞草 | 成人ssswww在线播放| 欧美精品123| 国产一区二区在线免费观看| 18精品爽视频在线观看| 精品调教chinesegay| 日本欧美一区| 日韩国产小视频| 国产亚洲精品超碰| a级片在线视频| 日本一区二区在线播放| 亚洲精品97| 欧美 日韩 国产 成人 在线观看|