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

www.国产三级| 久草综合在线视频| 麻豆久久久久| 一区二区三区在线播| 国产精品久久久久久久久久久久冷 | 免费看日韩毛片| 精品久久美女| 精品国产一区二区三区不卡| 日av中文字幕| 欧洲猛交xxxx乱大交3| aiss精品大尺度系列| 在线免费亚洲电影| 国产aaa免费视频| 成年网站在线| 波多野结衣视频一区| 国产精品美女av| 国产精品自拍视频一区| 婷婷成人基地| 亚洲欧美日韩精品久久奇米色影视| 亚洲一区日韩精品| 亚洲同志男男gay1069网站| 亚洲免费av观看| 五码日韩精品一区二区三区视频| 亚洲欧美激情在线观看| 精品一区在线看| 日韩美女免费线视频| 黄色小说在线观看视频| 99久久夜色精品国产亚洲96| 亚洲欧美日本精品| 成人在线电影网站| 国产一区一区| 欧美高清精品3d| 国产精品天天av精麻传媒| 久久av色综合| 亚洲激情校园春色| 在线观看成人av| 国产高清av在线| 337p粉嫩大胆色噜噜噜噜亚洲| av资源站久久亚洲| 国产富婆一级全黄大片| 久久精品久久99精品久久| 青青久久aⅴ北条麻妃| 国产精品1000| 黄色一区二区三区四区| 欧美成人免费全部| 三级影片在线看| 亚洲国产精品久久久天堂 | 欧美剧情片在线观看| 日本精品久久久久中文字幕| www在线看| 亚洲综合精品久久| 国产中文字幕乱人伦在线观看| 超碰在线caoporen| 亚洲欧美另类小说| 欧美精品一区二区性色a+v| 欧美黄色激情| 18涩涩午夜精品.www| 亚洲午夜精品一区二区三区| www免费网站在线观看| 国产欧美一区二区精品秋霞影院| 日本一区二区三不卡| 国产1区2区3区在线| 中文字幕乱码亚洲精品一区| 一卡二卡3卡四卡高清精品视频| 色网站免费在线观看| 亚洲四区在线观看| 日产精品久久久久久久蜜臀| 成人av影院在线观看| 午夜天堂影视香蕉久久| 日韩精品一区二区三区久久| 久久91导航| 88在线观看91蜜桃国自产| 在线观看日本www| 日本综合精品一区| 亚洲国产一区自拍| 亚洲国产无码精品| 日韩精品看片| 欧美大秀在线观看| 日日骚av一区二区| 奇米色一区二区| 亚洲伊人第一页| 午夜福利理论片在线观看| 久久久久久久av麻豆果冻| 亚洲欧洲三级| 久久电影网站| 日本道精品一区二区三区| 亚洲一区精品视频在线观看| 成人av影音| 国产亚洲视频中文字幕视频| 99久久99久久精品国产| 成人午夜小视频| 亚洲欧美精品在线观看| 欧美三级理伦电影| 亚洲综合视频在线观看| 免费看一级大黄情大片| 99riav视频在线观看| 色呦呦日韩精品| 国产九九九视频| 免费成人av| 久久天堂电影网| 国产三级av片| 国产老女人精品毛片久久| 精品国产乱码久久久久久88av| 久色视频在线| 亚洲在线视频免费观看| 美女网站免费观看视频| 影音先锋欧美激情| 视频一区视频二区国产精品| 国产一级片免费观看| www.国产黄色| 国产乱码精品一区二区三区忘忧草 | 成年人精品视频| 中文在线第一页| 成人在线综合网站| 一区二区在线观看网站| av电影一区| 精品国产自在久精品国产| 手机av在线不卡| 国产日韩1区| av一区二区三区四区电影| 最新av网站在线观看| 欧美日韩免费在线| 国产又粗又猛又爽又黄| 久久一区二区三区喷水| 国产91对白在线播放| 空姐吹箫视频大全| 亚洲激情图片一区| 久热在线视频观看| 精品视频免费| 日本亚洲欧洲色| 少妇高潮一区二区三区69| 一区二区三区不卡在线观看| 奇米影视四色在线| 欧美日中文字幕| 国产成人精品久久| 青青色在线视频| 精品毛片网大全| 韩国黄色一级片| 欧美私人啪啪vps| 亚洲最大福利视频网站| 黄色在线论坛| 欧美肥妇毛茸茸| 成人午夜免费影院| 久久精品国产免费| 亚洲精品在线免费看| 成人国产网站| 日韩网站在线观看| 这里只有精品9| 国产精品第四页| 狠狠干狠狠操视频| 亚洲精品国产首次亮相| 亚洲一区二区三区xxx视频| 黄色网页在线免费观看| 欧美巨大另类极品videosbest | 天天操天天干天天爽| 亚洲国产一区二区在线播放| 中文字幕18页| 亚洲精品社区| 欧美另类一区| 视频在线日韩| 日韩一区二区久久久| 97国产成人无码精品久久久| 亚洲色图视频免费播放| 亚洲av综合色区无码另类小说| 亚洲香蕉网站| 麻豆精品蜜桃一区二区三区| 精品国模一区二区三区| 久久精品99久久久久久久久| 国产后入清纯学生妹| 亚洲成人精品一区| 国产精品亚洲无码| 麻豆一区二区99久久久久| 久久99国产精品一区| 亚洲性视频在线| 欧美综合一区第一页| a天堂中文在线88| 3atv一区二区三区| 日韩免费在线视频观看| 国产午夜亚洲精品不卡| 欧美成人福利在线观看| 欧美视频在线观看| 欧美一区二区三区四区夜夜大片| 成人黄页网站视频| 久久久久国色av免费观看性色| 天堂av在线7| 91麻豆精品国产91久久久久久久久| 国内偷拍精品视频| 久久久三级国产网站| 亚洲午夜激情影院| 国产亚洲精品久久久久婷婷瑜伽| 翔田千里亚洲一二三区| 亚洲精品一二三**| 国产精品91一区| free性欧美16hd| 中文字幕日韩欧美在线| 成人乱码一区二区三区| 欧美日韩在线播放一区| 日本一级淫片免费放| 国产精品福利一区| 国产一级二级在线观看| 精品亚洲国内自在自线福利| 霍思燕三级露全乳照| 色综合天天爱| 久久久久久久久久久一区| 成人乱码手机视频| 日本欧美爱爱爱| 日本h片在线| xxxxx成人.com| 蜜桃视频在线观看视频| 日韩欧美亚洲国产精品字幕久久久 | 久久久国产精品无码| 久久99精品国产| 99久久久无码国产精品6| 欧美精品日本| 亚洲人成人77777线观看| 亚洲aa在线| 成人区精品一区二区| 国产美女视频一区二区 | 精品精品视频| 国产精品久久久久久久久久免费| 丁香花视频在线观看| 成人97在线观看视频| 天堂中文а√在线| 国产亚洲一区二区精品| 四虎精品在永久在线观看| 精品国一区二区三区| 国产精品亚洲欧美在线播放| 欧美亚洲综合一区| 蜜臀精品一区二区三区| 天天色综合天天| 国产精品成人aaaa在线| 一区二区三区精密机械公司| 青青草偷拍视频| 亚洲免费视频中文字幕| 日韩av毛片在线观看| 中文一区在线播放 | 一区二区成人在线| 黄色a级片在线观看| 综合欧美亚洲日本| 老熟妇高潮一区二区三区| 亚洲欧洲无码一区二区三区| 三级影片在线观看| 亚洲日本韩国一区| 亚洲精品卡一卡二| 最新国产精品久久精品| 老熟妇高潮一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 天天操天天摸天天舔| 国产精品毛片高清在线完整版| 中文字幕在线观看免费高清| 久久精品一区二区| 在线观看国产精品一区| 中文字幕成人在线观看| 国产精品麻豆免费版现看视频| 国产精品免费视频网站| 情侣偷拍对白清晰饥渴难耐| 亚洲免费在线观看| 久草网在线观看| 欧美日韩久久久久| aaa在线视频| 制服丝袜激情欧洲亚洲| 精品国产伦一区二区三| 精品免费日韩av| 亚洲av电影一区| 国产亚洲精品久久久久久| 在线视频婷婷| 久色乳综合思思在线视频| 色呦呦视频在线观看| 97视频在线观看免费| 日韩av中字| 91久久久在线| 国产精品丝袜在线播放| 蜜桃av久久久亚洲精品| 久久婷婷蜜乳一本欲蜜臀| 日韩视频 中文字幕| 国产日韩一区| 日本三级黄色网址| 成人av在线资源网| 国产三级黄色片| 洋洋av久久久久久久一区| 国产精品777777| 91精品国产综合久久久久久久 | 国模视频一区二区| 偷拍精品精品一区二区三区| 91香蕉国产在线观看| 久久av国产紧身裤| 亚洲国产欧美不卡在线观看 | 九九精品在线观看| 欧美大片免费高清观看| 亚洲影影院av| 美女久久99| 黄色一级片国产| 美腿丝袜在线亚洲一区| 一边摸一边做爽的视频17国产 | av在线不卡网| 99热99这里只有精品| 欧美日韩国产精品一区二区三区四区 | 亚洲午夜精品视频| 性欧美ⅴideo另类hd| 国产成人自拍视频在线观看| 一区二区在线免费播放| 亚洲欧美日韩综合一区| 中国女人久久久| 污视频在线观看免费网站| 国产亚洲欧洲997久久综合 | 亚洲区欧美区| 色婷婷狠狠18| 久久人人超碰精品| 国产无遮挡又黄又爽又色| 制服丝袜一区二区三区| 国产日本在线观看| 91成品人片a无限观看| 精品国产欧美| 亚洲欧美国产一区二区| 裸体素人女欧美日韩| 国产一级伦理片| 亚洲精品免费播放| 国产精品无码白浆高潮| 国产一区二区三区精品久久久 | 国产日本欧美一区| 米奇777超碰欧美日韩亚洲| 可以看毛片的网址| 韩国成人在线视频| www.xx日本| 欧美色中文字幕| 国产小视频免费在线网址| 欧美在线激情网| 精品在线网站观看| 国内少妇毛片视频| 成人一区在线观看| 18一19gay欧美视频网站| www在线免费观看视频| 国产日韩欧美电影在线观看| 国产一区二区三区日韩精品 | 69av视频在线| 欧美一区二区精品在线| 麻豆av在线导航| 成人欧美一区二区三区在线| 久久影院一区| 爱豆国产剧免费观看大全剧苏畅| 国产精品色呦呦| 中文字幕乱码一区二区| 在线国产精品播放| 国产情侣一区二区三区| 亚洲日本精品国产第一区| 久久精品国产秦先生| 日韩激情小视频| 日韩欧美亚洲国产另类| 丁香花高清在线观看完整版| 国产伦理久久久| 亚洲一区视频| 日本性高潮视频| 欧美三级乱人伦电影| 日本蜜桃在线观看| 亚洲最大福利视频网| 亚洲国产二区| 中国美女乱淫免费看视频| 在线观看免费亚洲| 蜜芽在线免费观看| 99久久99久久精品国产片| 国语自产精品视频在线看8查询8| 亚洲 欧美 日韩在线| 午夜激情久久久| 国产女人在线视频| 国产一区私人高清影院| 欧美天天在线| 亚洲一区二区三区蜜桃| 欧美日韩国产片| 金瓶狂野欧美性猛交xxxx| 久久av一区二区| 欧美aaaaa成人免费观看视频| 日韩在线中文字幕视频| 亚洲精品在线网站| 高清av一区二区三区| 国产卡一卡二在线| 99久久99久久精品免费观看| av片免费观看| 久久久国产一区| 亚洲男人都懂第一日本| 亚洲天堂2018av| 午夜视黄欧洲亚洲| 成人在线免费看| 国产伦精品一区二区三区四区免费| 亚洲欧美久久久| 欧美一区免费观看| 亚洲精品成人久久久| 国产亚洲人成a在线v网站| 日韩久久久久久久久久久久| 久久中文娱乐网| 国产欧美一级片| 国产激情综合五月久久| 欧美88av| 超碰人人干人人| 亚洲精品国产精品久久清纯直播 | 中国美女黄色一级片| 欧美精品一区二区三区蜜桃视频 | 潘金莲一级黄色片| 国产韩国精品一区二区三区| 亚洲啪啪av| 91在线视频播放地址|