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

八個關于 Promise 的高級用途的技巧

開發 前端
在js項目中,promise的使用應該是必不可少的,但我發現在同事和面試官中,很多中級以上的前端仍然堅持promiseInst.then()、promiseInst.catch()、Promise等常規用法等等。即使是 async/await 他們也只知道它但不知道為什么要使用它。

我發現很多人只知道如何常規地使用promise。

在js項目中,promise的使用應該是必不可少的,但我發現在同事和面試官中,很多中級以上的前端仍然堅持promiseInst.then()、promiseInst.catch()、Promise等常規用法等等。即使是 async/await 他們也只知道它但不知道為什么要使用它。

但實際上,Promise 有很多巧妙的高級用法,并且一些高級用法在 alova 請求策略庫內部也被廣泛使用。

現在,我將與大家分享8個高級使用技巧。希望這些技巧能夠對你有所幫助,現在,我們就開始吧。

1. Promise數組的串行執行

例如,如果你有一組接口需要串行執行,你可能首先想到使用await。

const requestAry = [() => api.request1(), () => api.request2(), () => api.request3()];
for (const requestItem of requestAry) {
  await requestItem();
}

如果使用promise,可以使用then函數串聯多個promise,實現串行執行。

const requestAry = [() => api.request1(), () => api.request2(), () => api.request3()];
const finallyPromise = requestAry.reduce(
     (currentPromise, nextRequest) => currentPromise.then(() => nextRequest()),
     Promise.resolve() // Create an initial promise for linking promises in the array
);

2. 在新的 Promise 范圍之外更改狀態

假設你有多個頁面,其功能要求在允許使用之前收集用戶信息。 點擊使用某個功能之前,會彈出一個彈框進行信息收集。 你會如何實施這個?

以下是不同級別前端同學的實現思路:

初級前端:我寫一個模態框,然后復制粘貼到其他頁面。 效率非常高!

中級前端:這個不好維護。 我們需要單獨封裝這個組件,并在需要的頁面引入!

高級前端:安裝任何密封的東西! ! ! 把方法調用寫在所有頁面都可以調用的地方不是更好嗎?

想要了解高級前端是如何實現的,以vue3為例,看一下下面的例子。

<!-- App.vue -->
<template>
<!-- The following is the modal box component -->
   <div class="modal" v-show="visible">
     <div>
       User name: <input v-model="info.name" />
     </div>
     <!-- Other information -->
     <button @click="handleCancel">Cancel</button>
     <button @click="handleConfirm">Submit</button>
   </div>
   <!-- Page components -->
</template>
<script setup>
import { provide } from 'vue';
const visible = ref(false);
const info = reactive({
   name: ''
});
let resolveFn, rejectFn;
// Pass the information collection function to the following
provide('getInfoByModal', () => {
   visible.value = true;
   return new Promise((resolve, reject) => {
     // Assign the two functions to the outside and break through the promise scope
     resolveFn = resolve;
     rejectFn = reject;
   });
})
const handleConfirm = () => {
   resolveFn && resolveFn(info);
};
const handleCancel = () => {
   rejectFn && rejectFn(new Error('User has canceled'));
};
</script>

接下來,getInfoByModal就可以通過直接調用模態框來輕松獲取用戶填寫的數據。

<template>
   <button @click="handleClick">Fill in the information</button>
</template>


<script setup>
import { inject } from 'vue';
const getInfoByModal = inject('getInfoByModal');
const handleClick = async () => {
   // After the call, the modal box will be displayed. After the user clicks to confirm, the promise will be changed to the fullfilled state to obtain the user information.
   const info = await getInfoByModal();
   await api.submitInfo(info);
}
</script>

這也是很多UI組件庫中封裝常用組件的一種方式。

3. async/await 的替代用法

很多人只知道它是用來在調用await時接收async函數的返回值的,卻不知道async函數它實際上是一個返回promise的函數。 例如,以下兩個函數是等效的:

const fn1 = async () => 1;
const fn2 = () => Promise.resolve(1);


fn1(); // Also returns a promise object with a value of 1

在大多數情況下,await 會跟隨 Promise 對象并等待它完全填充。 因此,下面的 fn1 函數 wait 也是等價的:

await fn1();


const promiseInst = fn1();
await promiseInst;

然而,await也有一個鮮為人知的秘密。 當它后面跟的值不是promise對象時,它會用promise對象包裝該值,所以await后面的代碼必須異步執行。 例子:

Promise.resolve().then(() => {
  console.log(1);
});
await 2;
console.log(2);
//Print order bits: 1 2

相當于

Promise.resolve().then(() => {
  console.log(1);
});
Promise.resolve().then(() => {
  console.log(2);
});

4. 承諾實施請求共享

當一個請求已經發出但尚未得到響應時,再次發出相同的請求,就會造成請求的浪費。 此時,我們可以將第一個請求的響應與第二個請求共享。

request('GET', '/test-api').then(response1 => {
  // ...
});
request('GET', '/test-api').then(response2 => {
  // ...
});

上述兩個請求實際上只發送一次,同時收到相同的響應值。

那么,請求共享有哪些使用場景呢? 我認為有以下三個:

  • 當頁面渲染多個內部組件同時獲取數據時;
  • 提交按鈕未禁用且用戶連續多次點擊提交按鈕;
  • 預加載數據的情況下,預加載完成之前進入預加載頁面;

這也是alova的高級功能之一。 要實現請求共享,需要使用promise的緩存功能,即一個promise對象可以通過多次await獲取數據。 簡單的實現思路如下:

const pendingPromises = {};
function request(type, url, data) {
   // Use the request information as the only request key to cache the promise object being requested
   //Requests with the same key will reuse promise
   const requestKey = JSON.stringify([type, url, data]);
   if (pendingPromises[requestKey]) {
     return pendingPromises[requestKey];
   }
   const fetchPromise = fetch(url, {
     method: type,
     data: JSON.stringify(data)
   })
   .then(response => response.json())
   .finally(() => {
     delete pendingPromises[requestKey];
   });
   return pendingPromises[requestKey] = fetchPromise;
}

上述兩個請求實際上只發送一次,同時收到相同的響應值。

那么,請求共享有哪些使用場景呢? 我認為有以下三個:

  • 當頁面渲染多個內部組件同時獲取數據時;
  • 提交按鈕未禁用且用戶連續多次點擊提交按鈕;
  • 預加載數據的情況下,預加載完成之前進入預加載頁面;

這也是alova的高級功能之一。 要實現請求共享,需要使用promise的緩存功能,即一個promise對象可以通過多次await獲取數據。 簡單的實現思路如下:

const promise = new Promise((resolve, reject) => {
  resolve();
  reject();
});

正確答案是已滿狀態。 我們只需要記住,一旦待處理的promise從一種狀態轉移到另一種狀態,就無法更改。 因此,例子中是先轉為fulfilled狀態,然后reject()就不會再轉為rejected狀態。

6.徹底明確then/catch/finally返回值

一句話概括就是,上面三個函數都會返回一個新的promise包裝對象。 包裝后的值是執行回調函數的返回值。 如果回調函數拋出錯誤,它將包裝拒絕狀態承諾。 似乎不太容易理解,我們來看一個例子:

我們可以將它們一一復制到瀏覽器控制臺并運行它們以幫助理解。

// then function
Promise.resolve().then(() => 1); // The return value is new Promise(resolve => resolve(1))
Promise.resolve().then(() => Promise.resolve(2)); // Return new Promise(resolve => resolve(Promise.resolve(2)))
Promise.resolve().then(() => {
   throw new Error('abc')
}); // Return new Promise(resolve => resolve(Promise.reject(new Error('abc'))))
Promise.reject().then(() => 1, () => 2); // The return value is new Promise(resolve => resolve(2))


//catch function
Promise.reject().catch(() => 3); // The return value is new Promise(resolve => resolve(3))
Promise.resolve().catch(() => 4); // The return value is new Promise(resolve => resolve(promise object that calls catch))
//When the finally function returns a non-promise value, return the promise object before the finally function.
Promise.resolve().finally(() => {}); // Return Promise.resolve()
Promise.reject().finally(() => {}); // Return Promise.reject()
// When the return value of the finally function is promise, wait for the returned promise to be parsed before returning the promise object before the finally function.
Promise.resolve(5).finally(() => new Promise(res => {
   setTimeout(res, 1000);
})); // Return the Promise in pending status, which will be resolved to 5 after 1 second.
Promise.reject(6).finally(() => new Promise(res => {
   setTimeout(res, 1000);
})); // Return the Promise in the pending state, and throw the number 6 after 1 second

7、then函數的第二次回調和catch回調有什么區別?

當請求發生錯誤時,會觸發 Promise 的 then 的第二個回調函數和 catch。 乍一看沒有區別,但實際上前者無法捕獲then當前第一個回調函數中拋出的錯誤,但catch可以。

Promise.resolve().then(
   () => {
     throw new Error('Error from success callback');
   },
   () => {
     // will not be executed
   }
).catch(reason => {
   console.log(reason.message); // Will print out "error from success callback"
});

原理就如上一點所說的。 catch 函數是在 then 函數返回的處于拒絕狀態的 Promise 上調用的,因此它的錯誤自然可以被捕獲。

8.(最終)Promise實現koa2洋蔥中間件模型

koa2框架引入了洋蔥模型,可以讓你的請求像剝洋蔥一樣一層層進去,再一層層出來,從而實現請求前后處理的統一。

我們來看一個簡單的 koa2 洋蔥模型:

const app = new Koa();
app.use(async (ctx, next) => {
  console.log('a-start');
  await next();
  console.log('a-end');
});
app.use(async (ctx, next) => {
  console.log('b-start');
  await next();
  console.log('b-end');
});


app.listen(3000);

上面的輸出是a-start -> b-start -> b-end -> a-end,這樣神奇的輸出序列是如何實現的呢? 有人沒天賦,簡單的用20行左右的代碼就實現了。 如有雷同,純屬巧合。

接下來我們分析一下

注:以下內容對新手不友好,請謹慎閱讀。

首先先保存中間件函數,在listen函數中收到請求后調用洋蔥模型執行。

function action(koaInstance, ctx) {
  // ...
}


class Koa {
   middlewares = [];
   use(mid) {
     this.middlewares.push(mid);
   }
   listen(port) {
     // Pseudocode simulates receiving request
     http.on('request', ctx => {
       action(this, ctx);
     });
   }
}

收到請求后,從第一個中間件開始串行執行next之前的前置邏輯。

//Start to start middleware call
function action(koaInstance, ctx) {
   let nextMiddlewareIndex = 1; // Identifies the next middleware index to be executed


   //Define next function
   function next() {
     // Before peeling the onion, calling next will call the next middleware function
     const nextMiddleware = middlewares[nextMiddlewareIndex];
     if (nextMiddleware) {
       nextMiddlewareIndex++;
       nextMiddleware(ctx, next);
     }
   }
   //Start execution from the first middleware function and pass in the ctx and next functions
   middlewares[0](ctx, next);
}

處理next之后的post邏輯

function action(koaInstance, ctx) {
   let nextMiddlewareIndex = 1;
   function next() {
     const nextMiddleware = middlewares[nextMiddlewareIndex];
     if (nextMiddleware) {
       nextMiddlewareIndex++;
       // A return is also added here to allow the execution of the middleware function to be executed in series from back to front using promises (it is recommended to understand this return repeatedly)
       return Promise.resolve(nextMiddleware(ctx, next));
     } else {
       // When the pre-logic of the last middleware is executed, return the fullyfilled promise and start executing the post-logic after next.
       return Promise.resolve();
     }
   }
   middlewares[0](ctx, next);
}

至此,一個簡單的洋蔥模型就已經實現了。

總結

以上就是我今天想與你分享的8個關于Promise的高級用途的全部內容,如果你覺得有用的話,請記得點贊我,關注我,并將這個內容分享給你的小伙伴們,也許能夠幫助到他。

責任編輯:華軒 來源: web前端開發
相關推薦

2025-02-07 15:01:49

Promise數組前端

2024-03-06 13:56:00

項目awaitpromise

2024-07-02 09:03:48

2012-10-29 11:01:17

2025-02-10 10:38:24

2022-12-15 16:38:17

2025-01-02 15:08:36

SpringBoot自動配置Java

2022-05-30 00:04:16

開源Github技巧

2010-08-25 11:14:05

云安全數據安全網絡安全

2023-10-24 09:25:23

IT技巧文化

2023-06-27 09:21:33

2025-05-09 09:26:12

2023-01-03 11:47:47

2023-02-22 14:50:59

技術AI

2024-04-01 07:51:49

Exclude?工具類型TypeScript

2024-03-21 09:58:27

ExtractTypeScript工具類型

2023-09-04 15:48:05

JavaScript語言

2021-11-19 10:40:14

物聯網物聯網安全IoT

2021-01-11 08:30:02

Dubbo服務

2023-11-27 16:01:59

JavaScrip技巧
點贊
收藏

51CTO技術棧公眾號

精品日产免费二区日产免费二区| 日韩大片免费观看| 国产成a人亚洲| 91po在线观看91精品国产性色| 真实乱视频国产免费观看| 欧美高清xxx| 亚洲国产精品影院| 日韩欧美99| 国产综合在线播放| 日韩va亚洲va欧美va久久| 久久婷婷国产麻豆91天堂| 丰满大乳奶做爰ⅹxx视频| 精品九九久久| 午夜精品一区在线观看| 精品久久免费观看| 免费动漫网站在线观看| 国产91高潮流白浆在线麻豆| 国产欧美日韩高清| 天堂在线免费观看视频| 国产一在线精品一区在线观看| 国产一区二区三区在线播放免费观看| 中文字幕天堂av| 欧洲午夜精品| 欧美私人免费视频| 你懂的av在线| 日本片在线观看| 亚洲欧洲精品天堂一级| 欧美一区1区三区3区公司| 亚洲第一天堂影院| 国产综合久久久久久鬼色| 国产91在线播放| 91看片在线播放| 黄色日韩精品| 欧美激情视频在线| 欧美色视频一区二区三区在线观看| 久久丝袜视频| 亚洲国产精品字幕| 久草免费资源站| 18国产精品| 日韩一区二区影院| 午夜xxxxx| 国产精品亚洲欧美日韩一区在线| 欧美日韩小视频| 最近中文字幕一区二区| 欧亚一区二区| 在线观看视频一区| 一本久道中文无码字幕av| 高清不卡av| 色偷偷久久人人79超碰人人澡| 男女超爽视频免费播放| 丁香花在线高清完整版视频| 艳妇臀荡乳欲伦亚洲一区| 国产91视频一区| 欧美hdxxxxx| 亚洲一区二区五区| 日韩欧美精品免费| 国产福利在线免费观看| 婷婷久久综合九色综合绿巨人 | 亚洲午夜电影在线| 久久久久久久9| 超级碰碰不卡在线视频| 午夜视频久久久久久| 精品人妻少妇一区二区| 多野结衣av一区| 色网站国产精品| 色91精品久久久久久久久| 91丨精品丨国产| 日韩精品中午字幕| 荫蒂被男人添免费视频| 日韩精品社区| 在线播放精品一区二区三区 | 图片区亚洲欧美小说区| 美日韩精品免费观看视频| 久久亚洲AV无码| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品极品美女在线观看免费| 亚洲天堂网在线观看视频| 国产精品一区三区| 精品蜜桃一区二区三区| 成年人视频免费在线观看| 自拍偷拍亚洲综合| 欧美精品久久久久久久自慰| 欧美一级二级视频| 欧美一区二区视频在线观看2020 | 国产婷婷精品av在线| 在线观看国产一区| 成人影院在线播放| 日本乱人伦aⅴ精品| 91精品999| 人人精品视频| 日韩亚洲欧美成人| 亚洲黄色一区二区| 蜜臀久久99精品久久久久久9| 97夜夜澡人人双人人人喊| 日本电影一区二区在线观看| 1024国产精品| 久久婷婷五月综合色国产香蕉| 日韩城人网站| 精品亚洲一区二区三区四区五区 | 五月激情综合色| 国产精品一区二区小说| 国产精品99久久免费观看| 在线观看亚洲视频| 国产香蕉视频在线| 国产精品资源网| 日韩视频在线播放| 成人免费观看在线观看| 在线观看91精品国产麻豆| 亚洲国产欧美视频| 女人香蕉久久**毛片精品| 国产不卡视频在线| 人妻丰满熟妇av无码区hd| 国产精品成人在线观看| 欧美xxxxx在线视频| 国产精品欧美大片| 久久综合色影院| 91porny九色| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 国产a级一级片| 亚洲国产中文在线| 日韩视频永久免费观看| 亚洲中文一区二区| 91在线国产福利| 国产欧美精品aaaaaa片| 91精品福利观看| 中文字幕亚洲二区| 亚洲成人第一网站| 91视频国产资源| 成人午夜视频在线观看免费| 日韩国产在线不卡视频| 久久躁狠狠躁夜夜爽| 中文字幕 日韩有码| 久久久www成人免费毛片麻豆| 99久久国产综合精品五月天喷水| 99亚洲乱人伦aⅴ精品| 久久国产精品久久国产精品| 一区二区三区黄| 国产精品美女久久久久久| 激情视频综合网| 久久99久久人婷婷精品综合 | 免费cad大片在线观看| 中文字幕综合| 久久精品小视频| 国产一区二区三区视频免费观看| 国产精品久久久久一区二区三区| 亚洲精品视频导航| 91欧美日韩| 成人av在线亚洲| 麻豆传媒在线免费看| 欧美三级资源在线| 美国一级黄色录像| 久久国产三级精品| 丰满女人性猛交| 亚洲网一区二区三区| 欧美激情亚洲自拍| 亚洲av成人精品毛片| 欧美三级欧美成人高清www| 丰满圆润老女人hd| 日本中文在线一区| 一区二区三区三区在线| 精品麻豆剧传媒av国产九九九| 欧美精品情趣视频| 天堂成人在线视频| 日本福利一区二区| 日本激情视频一区二区三区| 国产伦精品一区二区三区免费| 欧美极品少妇无套实战| 欧美freesex8一10精品| 国产成人欧美在线观看| 欧美精品日韩少妇| 精品国产一区二区三区久久影院| 国产九色在线播放九色| 国产精品美女久久久久高潮| 国模大尺度视频| 一本不卡影院| 午夜精品区一区二区三| 日韩视频在线直播| 欧美一区第一页| 日韩伦理在线观看| 精品三级在线观看| 黄色av一级片| 亚洲男同性恋视频| bl动漫在线观看| 免费在线观看一区二区三区| 91.com在线| 欧美日韩在线播放视频| 肥熟一91porny丨九色丨| 伊人久久国产| 欧美大胆在线视频| 久久免费看视频| 91精品综合久久久久久| 国产又大又黄视频| 亚洲三级理论片| 扒开jk护士狂揉免费| 国产一区在线观看视频| aⅴ在线免费观看| 综合激情在线| 日韩中文字幕一区二区| 成人av综合网| 国产伦精品一区二区三区精品视频| 国产盗摄在线视频网站| 神马国产精品影院av| 欧美视频久久久| 欧美久久久久中文字幕| 人妻丰满熟妇av无码区| 一区二区三区.www| 亚洲图片第一页| 久久久国产午夜精品| 亚洲啪av永久无码精品放毛片| 久久成人羞羞网站| 免费av网址在线| 一区视频在线| 黄色网址在线免费看| av亚洲免费| 国产欧美亚洲日本| 麻豆一二三区精品蜜桃| 国产精品自产拍在线观看中文| 中文在线а√在线8| 高清欧美性猛交xxxx黑人猛交| 国产在线激情| 神马久久桃色视频| 成人高清在线| 亚洲香蕉在线观看| 五月婷婷免费视频| 亚洲精品在线三区| 精品国产va久久久久久久| 欧美日本在线视频| 波多野结衣黄色| 一本大道综合伊人精品热热| 久久久久久久黄色片| 五月天久久比比资源色| 久久国产精品系列| 亚洲成人动漫在线观看| 久热精品在线观看| 亚洲一二三四在线观看| 欧美成人精品欧美一级| 亚洲欧美偷拍三级| 午夜免费激情视频| 亚洲三级视频在线观看| 老女人性淫交视频| 亚洲精品伦理在线| 精品爆乳一区二区三区无码av| 亚洲黄色在线视频| 免费一级片视频| 亚洲福中文字幕伊人影院| 18精品爽视频在线观看| 亚洲第一精品在线| 日本少妇在线观看| 欧美日韩国产精品专区| 伊人手机在线视频| 在线免费观看一区| 一级黄色免费看| 91精品视频网| 亚洲欧美另类日韩| 亚洲激情第一页| 九九九伊在人线综合| 中文字幕成人在线| 国产剧情在线| 国a精品视频大全| 亚洲涩涩在线| 国产欧美婷婷中文| 日韩一区二区三区精品| 国产精品一区在线观看| 美女毛片一区二区三区四区| 日韩一区二区电影在线观看| 亚欧美无遮挡hd高清在线视频 | 青草在线视频| 97久久精品人人澡人人爽缅北| 中国色在线日|韩| 国产男女猛烈无遮挡91| 狂野欧美xxxx韩国少妇| 精品视频一区在线| 欧美少妇xxxx| 日韩a级黄色片| 亚洲综合欧美| 在线免费观看av网| 不卡在线视频中文字幕| 欧美福利第一页| 亚洲精品视频免费看| 国产超碰人人爽人人做人人爱| 欧美日韩国产成人在线91| 精品人妻aV中文字幕乱码色欲 | 99视频免费观看| 一本色道久久综合狠狠躁的番外| 亚洲欧洲日韩综合二区| 激情综合电影网| 另类小说色综合| 国产成人无遮挡在线视频| 扒开jk护士狂揉免费| 成人免费在线视频| 日韩 欧美 综合| 欧美日韩成人一区二区| 天堂中文资源在线观看| 日韩性生活视频| 黑人精品一区| 福利视频久久| 97精品国产| 欧美一级黄色片视频| 国产河南妇女毛片精品久久久 | 国产精品黄页免费高清在线观看| 日本成人手机在线| 日韩免费一区二区三区| 日韩视频不卡| 日韩av影视大全| 国产人久久人人人人爽| 日本在线观看视频网站| 欧美丰满少妇xxxxx高潮对白 | 97超碰人人草| 亚洲视频一区二区| 国产美女一区视频| 91久久久久久久一区二区| 国产精品羞羞答答在线观看| 成人免费视频91| 国产精品一区二区91| 日本人亚洲人jjzzjjz| 天天操天天色综合| www.色亚洲| 久久影视电视剧免费网站清宫辞电视 | 国产原创剧情av| 亚洲欧美日韩系列| 69亚洲精品久久久蜜桃小说| 亚洲国产毛片完整版| 亚洲羞羞网站| 亚洲一区制服诱惑| 国产精品精品国产一区二区| 性刺激的欧美三级视频| 久久精品一区二区| 一级黄色av片| 亚洲视频一区二区| 欧美日韩五码| 欧美日韩国产三区| 久久xxxx精品视频| 日本69式三人交| 亚洲成人av中文| 亚洲欧美黄色片| 欧美激情视频网| 极品尤物一区| 日本免费不卡一区二区| 99久久久久久| 日韩精品在线免费视频| 亚洲精品国产免费| 成人国产二区| 日本一区二区在线| 美腿丝袜亚洲一区| 免费黄色国产视频| 欧美老女人第四色| 黄色国产网站在线播放| 亚洲一区二区三区sesese| 中文乱码免费一区二区三区下载| 成人免费播放视频| 亚洲一二三四区| 午夜视频在线免费播放| 亲爱的老师9免费观看全集电视剧| 欧美福利在线播放网址导航| 国产男女无遮挡| 国产午夜精品久久| 亚洲专区在线播放| 久色乳综合思思在线视频| 亚洲三级av| 凹凸国产熟女精品视频| 国产日本欧美一区二区| 国产精品嫩草影院精东| 九九精品在线视频| 精品国产一区二区三区成人影院| 日韩av三级在线| 国产精品色婷婷久久58| 国产精品系列视频| 韩日欧美一区二区| 国产精品片aa在线观看| 特级西西444www| 午夜不卡在线视频| 北岛玲一区二区三区| 亚洲综合色激情五月| 国产欧美成人| 国产不卡在线观看视频| 日韩欧美中文一区| gay欧美网站| 亚洲精品国产精品国自产观看| 国产乱人伦偷精品视频不卡| 成人精品在线看| 色多多国产成人永久免费网站| 日韩免费成人| 成年人视频在线免费| 亚洲欧美激情一区二区| 欧美色图另类| 91夜夜未满十八勿入爽爽影院| 一区二区三区国产盗摄| 大吊一区二区三区| 亚洲国产成人精品一区二区| 国产精品亚洲成在人线| 久久久久久www| 国产精品免费观看视频| 天天色棕合合合合合合合| 国产伦精品免费视频| 国产欧美日韩综合一区在线播放| 二区三区四区视频| 亚洲欧美一区二区激情| 91成人午夜| 老司机午夜性大片| 一本到高清视频免费精品|