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

如何使用Promise.race() 和 Promise.any() ?

開發 前端
自1996年發布以來,JS 一直在穩步改進。隨著ECMAScript版本的許多改進,最近的版本是ES2020。JS 的一個重要更新是Promise,在2015年,它以 ES6 的名義發布。

 [[357642]]

自1996年發布以來,JS 一直在穩步改進。隨著ECMAScript版本的許多改進,最近的版本是ES2020。JS 的一個重要更新是Promise,在2015年,它以 ES6 的名義發布。

什么是 Promise ?

MDN 上對 Promise 的定義:Promise 對象用于表示一個異步操作的最終完成 (或失敗)及其結果值。對于新手來說,這聽起來可能有點太復雜了。

國外一位大什么對Promises的解釋如下:“想象一下你是個孩子。你老媽向你保證,她下周會給你買一部新手機。”

你要到下周才能知道你是否能獲取那部手機。你老媽要么真的給你買了一個全新的手機,要么因為不開心就不給你買。

這個就是一個Promise。一個Promise有三個狀態。分別是:

  1. Pending:你不知道你是否能得到那部手機
  2. Fulfilled:老媽高興了,給你買了
  3. Rejected:老娘不開森了,不給你買了

這個是我目前聽到,最快能理解 Promise 事例。

如果你還沒有開始學習 Promise ,建議你這樣做。

Promise包含幾種非常有用的內置方法。今天我們主要介紹這兩種方法。

  • Promise.race()-與 ES6 一起發布
  • Promise.any() -仍處于第4階段的提案中

Promise.race()

Promise.race()方法最初是在 ES6 中引入 Promise 時發布的,這個方法需要一個iterable作為參數。

Promise.race(iterable) 方法返回一個 promise,一旦迭代器中的某個promise解決或拒絕,返回的 promise 就會解決或拒絕。

與Promise.any()方法不同,Promise.race()方法主要關注 Promise 是否已解決,而不管其被解決還是被拒絕。

語法

  1. Promise.race(iterable) 

參數

iterable — 可迭代對象,類似 Array。iterable 對象實現Symbol.iterator方法。

返回值

一個待定的 Promise 只要給定的迭代中的一個promise解決或拒絕,就采用第一個promise的值作為它的值,從而異步地解析或拒絕(一旦堆棧為空)。

注意

因為參數接受iterable,所以我們可以傳遞一些值,比如基本值,甚至數組中的對象。在這種情況下,race方法將返回傳遞的第一個非 promise 對象。這主要是因為方法的行為是在值可用時(當 promise 滿足時)立即返回值。

此外,如果在iterable中傳遞了已經解決的Promise,則Promise.race()方法將解析為該值的第一個。如果傳遞了一個空的Iterable,則race方法將永遠處于待處理狀態。

事例

  1. const promise1 = new Promise((resolve, reject) => { 
  2.     setTimeout(resolve, 500, 'promise 1 resolved'); 
  3. }); 
  4.  
  5. const promise2 = new Promise((resolve, reject) => { 
  6.     setTimeout(reject, 100, 'promise 2 rejected'); 
  7. }); 
  8.  
  9. const promise3 = new Promise((resolve, reject) => { 
  10.     setTimeout(resolve, 200, 'promise 3 resolved'
  11. }); 
  12.  
  13. (async () => { 
  14.     try { 
  15.         let result = await Promise.race([promise1, promise2, promise3]); 
  16.         console.log(result); 
  17.     } catch (err) { 
  18.         console.error(err); 
  19.     } 
  20. })(); 
  21.   // 輸出- "promise 2 rejected" 
  22.   // 盡管promise1和promise3可以解決,但promise2拒絕的速度比它們快。 
  23.   // 因此Promise.race方法將以promise2拒絕 

真實用例

現在,你可能想知道,我們在實戰中何時 Promise.race() ?來看看。

在請求數據時,顯示加載動畫

使用加載動畫開發中是非常常見。當數據響應時間較長時,如果沒使用加載動畫,看起來就像沒有響應一樣。但有時,響應太快了,我們需要加載動畫時,增加一個非常小延遲時間,這樣會讓用戶覺得我是在經常請求過來的。要實現這一點,只需使用Promise.race()方法,如下所示。

  1. function getUserInfo(user) { 
  2.   return new Promise((resolve, reject) => { 
  3.     // had it at 1500 to be more true-to-life, but 900 is better for testing 
  4.     setTimeout(() => resolve("user data!"), Math.floor(900*Math.random())); 
  5.   }); 
  6.  
  7. function showUserInfo(user) { 
  8.   return getUserInfo().then(info => { 
  9.     console.log("user info:", info); 
  10.     return true
  11.   }); 
  12.  
  13. function showSpinner() { 
  14.   console.log("please wait..."
  15.  
  16. function timeout(delay, result) { 
  17.   return new Promise(resolve => { 
  18.     setTimeout(() => resolve(result), delay); 
  19.   }); 
  20. Promise.race([showUserInfo(), timeout(300)]).then(displayed => { 
  21.   if (!displayed) showSpinner(); 
  22. }); 

**取消的 Promise **

有些情況下,我們需要取消 Promise,這時也可以借助 Promise.race() 方法:

  1. function timeout(delay) { 
  2.   let cancel; 
  3.   const wait = new Promise(resolve => { 
  4.     const timer = setTimeout(() => resolve(false), delay); 
  5.     cancel = () => { 
  6.       clearTimeout(timer); 
  7.       resolve(true); 
  8.     }; 
  9.   }); 
  10.   wait.cancel = cancel; 
  11.   return wait; 
  12.  
  13.  
  14. function doWork() { 
  15.   const workFactor = Math.floor(600*Math.random()); 
  16.   const work = timeout(workFactor); 
  17.    
  18.   const result = work.then(canceled => { 
  19.     if (canceled) 
  20.       console.log('Work canceled'); 
  21.     else 
  22.       console.log('Work done in', workFactor, 'ms'); 
  23.     return !canceled; 
  24.   }); 
  25.   result.cancel = work.cancel; 
  26.   return result; 
  27.  
  28. function attemptWork() { 
  29.   const work = doWork(); 
  30.   return Promise.race([work, timeout(300)]) 
  31.     .then(done => { 
  32.       if (!done) 
  33.         work.cancel(); 
  34.       return (done ? 'Work complete!' : 'I gave up'); 
  35.   }); 
  36.  
  37. attemptWork().then(console.log); 

批處理請求,用于長時間執行

Chris Jensen 有一個有趣的race()方法用例。他曾使用Promise.race()方法批處理長時間運行的請求。這樣一來,他們可以保持并行請求的數量固定。

  1. const _ = require('lodash'
  2.  
  3. async function batchRequests(options) { 
  4.     let query = { offset: 0, limit: options.limit }; 
  5.  
  6.     do { 
  7.         batch = await model.findAll(query); 
  8.         query.offset += options.limit; 
  9.  
  10.         if (batch.length) { 
  11.             const promise = doLongRequestForBatch(batch).then(() => { 
  12.                 // Once complete, pop this promise from our array 
  13.                 // so that we know we can add another batch in its place 
  14.                 _.remove(promises, p => p === promise); 
  15.             }); 
  16.             promises.push(promise); 
  17.  
  18.             // Once we hit our concurrency limit, wait for at least one promise to 
  19.             // resolve before continuing to batch off requests 
  20.             if (promises.length >= options.concurrentBatches) { 
  21.                 await Promise.race(promises); 
  22.             } 
  23.         } 
  24.     } while (batch.length); 
  25.  
  26.     // Wait for remaining batches to finish 
  27.     return Promise.all(promises); 
  28.  
  29. batchRequests({ limit: 100, concurrentBatches: 5 }); 

Promise.any()

Promise.any() 接收一個Promise可迭代對象,只要其中的一個 promise 成功,就返回那個已經成功的 promise 。如果可迭代對象中沒有一個 promise 成功(即所有的 promises 都失敗/拒絕),就返回一個失敗的 promise 和AggregateError類型的實例,它是 Error 的一個子類,用于把單一的錯誤集合在一起。本質上,這個方法和Promise.all()是相反的。

注意!Promise.any() 方法依然是實驗性的,尚未被所有的瀏覽器完全支持。它當前處于 TC39 第四階段草案(Stage 4)

語法

  1. Promise.any(iterable); 

參數

iterable — 個可迭代的對象, 例如 Array。

返回值

  • 如果傳入的參數是一個空的可迭代對象,則返回一個 已失敗(already rejected) 狀態的 Promise。
  • 如果傳入的參數不包含任何 promise,則返回一個 **異步完成 (asynchronously resolved)**的 Promise。
  • 其他情況下都會返回一個處理中(pending) 的 Promise。只要傳入的迭代對象中的任何一個 promise 變成成功(resolve)狀態,或者其中的所有的 promises 都失敗,那么返回的 promise 就會 異步地(當調用棧為空時) 變成成功/失敗(resolved/reject)狀態。

說明

這個方法用于返回第一個成功的 promise 。只要有一個 promise 成功此方法就會終止,它不會等待其他的 promise 全部完成。

不像 Promise.all() 會返回一組完成值那樣(resolved values),我們只能得到一個成功值(假設至少有一個 promise 完成)。當我們只需要一個 promise 成功,而不關心是哪一個成功時此方法很有用的。

同時, 也不像 Promise.race() 總是返回第一個結果值(resolved/reject)那樣,這個方法返回的是第一個 成功的 值。這個方法將會忽略掉所有被拒絕的 promise,直到第一個 promise 成功。

事例

  1. const promise1 = new Promise((resolve, reject) => { 
  2.   setTimeout(reject, 100, 'promise 1 rejected'); 
  3. }); 
  4.  
  5. const promise2 = new Promise((resolve, reject) => { 
  6.   setTimeout(resolve, 400, 'promise 2 resolved at 400 ms'); 
  7. }); 
  8.  
  9. const promise3 = new Promise((resolve, reject) => { 
  10.   setTimeout(resolve, 700, 'promise 3 resolved at 800 ms'); 
  11. }); 
  12.  
  13. (async () => { 
  14.   try { 
  15.     let value = await Promise.any([promise1, promise2, promise3]); 
  16.     console.log(value); 
  17.   } catch (error) { 
  18.     console.log(error); 
  19.   } 
  20. })(); 
  21.  
  22. //Output - "promise 2 resolved at 400 ms" 

從上面代碼注意到Promise.any()主要關注解析的值。它會忽略在100毫秒時拒絕的promise1,并考慮在400毫秒后解析的promise2的值。

真實用例

從最快的服務器檢索資源

假設訪問我們網站的用戶可能來自全球各地。如果我們的服務器基于單個位置,那么響應時間將根據每個用戶的位置而不同。但是如果我們有多個服務器,可以使用能夠產生最快響應的服務器。在這種情況下,可以使用Promise.any()方法從最快的服務器接收響應。

我是小智,我們下期再見!

作者:Mahdhi Rezvi 譯者:前端小智 來源: medium

原文:https://blog.bitsrc.io/introduction-to-promise-race-and-promise-any-with-real-life-examples-9d8d1b9f8ec9

本文轉載自微信公眾號「大遷世界」,可以通過以下二維碼關注。轉載本文請聯系大遷世界公眾號。

 

責任編輯:武曉燕 來源: 大遷世界
相關推薦

2021-04-28 08:21:21

Promise.any服務器場景

2024-05-20 01:10:00

Promise變量

2023-09-15 15:31:23

異步編程Promise

2020-09-18 09:02:20

JavaScript

2021-03-15 08:15:42

ES2021語言開發

2023-01-12 11:23:11

Promise異步編程

2022-09-28 12:23:36

Promise代碼

2021-04-29 08:28:24

架構參數傳遞

2020-07-29 17:35:08

Promise源碼前端

2023-10-08 10:21:11

JavaScriptAsync

2021-04-27 08:31:37

Promisereject信息

2019-12-09 15:20:09

JavascriptPromise前端

2018-03-13 16:04:45

Promise執行順序

2021-03-09 07:37:42

技術Promise測試

2023-10-04 07:25:59

JavaScriptpromises

2021-09-02 12:07:48

Swift 監聽系統Promise

2022-01-21 08:50:15

Promise任務隊列前端

2016-11-01 19:22:36

Javascript前端Promise

2017-05-11 20:20:59

JavascriptPromiseWeb

2015-07-23 11:59:27

JavascriptPromise
點贊
收藏

51CTO技術棧公眾號

日韩和欧美一区二区三区| 亚洲色图丝袜| 亚洲一区二区三区四区在线 | 久久久久久久国产视频| 亚洲欧洲av| 91麻豆精品国产无毒不卡在线观看| 成人高清dvd| 日韩资源在线| 久草热8精品视频在线观看| 欧美国产日韩一区二区三区| www.av欧美| 欧美h版在线观看| 欧洲色大大久久| youjizz.com在线观看| 国产主播福利在线| 成人手机在线视频| 成人黄色av网| 亚洲男人天堂网址| 影音先锋中文字幕一区| 日韩在线中文视频| 99久久人妻精品免费二区| 91国产一区| 在线日韩国产精品| 欧美日韩二三区| 午夜伦理在线视频| 亚洲欧洲日韩在线| 欧美乱偷一区二区三区在线| 国产精品久久久久久久一区二区 | 中日韩av在线播放| 暖暖成人免费视频| 天天综合色天天综合色h| 日本三日本三级少妇三级66| yiren22综合网成人| 久久中文娱乐网| 国产精品免费一区二区| a天堂中文在线观看| 蜜桃视频第一区免费观看| 奇门遁甲1982国语版免费观看高清 | jizz国产视频| 久久精品国产99国产精品| 日韩av电影在线播放| 日本在线小视频| 韩国一区二区三区在线观看| 久久大大胆人体| 永久av免费网站| 波多野结衣的一区二区三区| 亚洲视频综合网| 新91视频在线观看| 西瓜成人精品人成网站| 日韩av网站在线| 男男做爰猛烈叫床爽爽小说| eeuss鲁片一区二区三区| 日韩美女视频一区二区在线观看| 天天干天天色天天干| 欧美爱爱视频| 欧美日韩国产一区| 久久国产激情视频| 99久久这里有精品| 91精品黄色片免费大全| 国产资源中文字幕| 亚洲一区二区电影| 欧美xxx久久| 理论片大全免费理伦片| 日韩成人动漫在线观看| 亚洲裸体xxxx| 娇妻被老王脔到高潮失禁视频| 免费久久久久久久久| 亚洲性生活视频| 波多野结衣家庭教师在线观看| 久久一区二区三区电影| 久久精品视频导航| 日韩xxx高潮hd| 先锋亚洲精品| 国产精品一区二区久久久久| 国产女人高潮毛片| 成人午夜电影网站| 欧美性xxxx69| 97caopor国产在线视频| 亚洲国产你懂的| 韩国一区二区av| 四虎视频在线精品免费网址| 欧美va日韩va| 亚洲 小说 欧美 激情 另类| 91亚洲国产| 久久久噜噜噜久久久| 欧产日产国产69| 国产在线国偷精品产拍免费yy| 国产传媒一区| 成人影视在线播放| 亚洲一卡二卡三卡四卡无卡久久| 欧美三级一级片| 色狠狠一区二区三区| 精品粉嫩超白一线天av| 国产人妻大战黑人20p| 中出一区二区| 日本电影亚洲天堂| 国产女无套免费视频| 91小视频免费看| 中文网丁香综合网| 日韩脚交footjobhd| 欧美人妇做爰xxxⅹ性高电影| 久久性爱视频网站| 亚州av乱码久久精品蜜桃| 97超级碰在线看视频免费在线看| 中文字幕在线观看欧美| 成人激情免费电影网址| 亚洲国产一区二区三区在线| 丁香花高清在线观看完整版| 欧美日韩国产精品成人| 97人妻天天摸天天爽天天| 亚洲精品tv久久久久久久久久| 欧美性视频在线| 成人av免费播放| 国产精品女主播av| 国产aaa一级片| 一本色道69色精品综合久久| 中文字幕免费国产精品| 中文字幕亚洲精品在线| 国产精品白丝jk黑袜喷水| 亚洲欧美一区二区原创| 中文字幕在线视频久| 亚洲成人a**站| 欧美卡一卡二卡三| 国产一区二区网址| 亚洲精品在线视频观看| 成人免费网站视频| 精品国产一区久久| 久久久久亚洲AV成人| 久久精品国产一区二区三| 人禽交欧美网站免费| 第一福利在线视频| 精品国产乱码久久久久久夜甘婷婷| 亚洲色图第四色| 老司机免费视频久久| 久久精品二区| 碰碰在线视频| 亚洲精品www| 91精品国产色综合久久久蜜香臀| 少妇高潮喷水久久久久久久久久| 亚洲综合色婷婷在线观看| 久久精品视频网站| 在线视频1卡二卡三卡| 国产欧美在线观看一区| 热久久精品国产| 精品日韩毛片| 国产精品久久一区主播| www.亚洲免费| 在线免费视频一区二区| 在线免费观看视频| 美女视频黄a大片欧美| 亚洲天堂电影网| 亚洲欧美久久精品| 欧美成人午夜激情在线| 精品人妻久久久久一区二区三区| 亚洲综合男人的天堂| 秘密基地免费观看完整版中文| 好看的日韩av电影| 国产一区二区精品在线| 美女搞黄视频在线观看| 亚洲欧美成人网| 亚洲中文无码av在线| 国产精品久久午夜| 日韩av影视大全| 国色天香一区二区| 欧美日韩一区二区视频在线观看| 欧美精品总汇| 久久久国产一区二区三区| 精品国产乱码一区二区三| 亚洲一区二区三区四区不卡| 在线观看国产三级| 日韩精品一区第一页| 国产免费色视频| 91国内精品| 国产精品igao视频| 黄网址在线观看| 亚洲国产成人精品久久| 中文字幕黄色片| 自拍偷拍亚洲综合| 午夜av免费看| 蜜桃av一区二区三区电影| 伊人再见免费在线观看高清版| 玖玖玖免费嫩草在线影院一区| 日韩免费在线免费观看| 久做在线视频免费观看| 亚洲激情自拍图| 在线免费看91| 性感美女极品91精品| 国产调教在线观看| 丰满少妇久久久久久久| 天天影视综合色| 黄色成人在线网站| 亚洲成人午夜在线| 国产精品任我爽爆在线播放| 国产精品美女久久久久久免费| 在线观看操人| 国产亚洲精品美女久久久| 国产女人18毛片水真多| 在线观看视频一区二区欧美日韩 | 国产精品国产三级国产普通话三级| 久久久久无码精品| 久色成人在线| 日韩亚洲欧美视频| 国产精品videosex性欧美| 精选一区二区三区四区五区| 高清不卡一区| 国产精品吊钟奶在线| 51精品在线| 久久成人国产精品| 91精彩视频在线播放| 日韩禁在线播放| www.中文字幕| 欧美日韩国产一级| 午夜久久久久久久久久影院| 亚洲二区在线视频| 中文字幕在线2021| 中文字幕乱码亚洲精品一区| 人妻在线日韩免费视频| 国产成人h网站| 亚洲色图偷拍视频| 秋霞午夜鲁丝一区二区老狼| 日韩av片在线看| 日韩一级在线| 丰满少妇大力进入| 欧美日韩精品| 老汉色影院首页| 99精品全国免费观看视频软件| 日韩欧美亚洲日产国| 三级精品视频| 久久国产精品高清| 高清精品视频| 国产美女在线精品免费观看| 国产精品亚洲一区二区在线观看| 国产欧美日韩91| 日日夜夜亚洲精品| 成人美女免费网站视频| 日韩三区免费| 国产精品爱久久久久久久| 成人欧美大片| 国产福利精品在线| 欧美影视资讯| 国产精品久久婷婷六月丁香| 成人在线视频观看| 国产欧美一区二区三区四区 | 欧美系列亚洲系列| 国产免费一区二区三区四区五区| 欧美特级www| www五月天com| 欧美少妇性性性| 国产精品欧美亚洲| 日韩一区国产二区欧美三区| 国产不卡av在线播放| 日韩精品一区二区三区中文不卡| 国产ts变态重口人妖hd| 精品国产区一区| 天天躁日日躁狠狠躁喷水| 精品无人区太爽高潮在线播放| 亚洲 欧美 自拍偷拍| 亚洲男人天堂2024| 国产毛片av在线| www国产精品com| 色婷婷视频在线观看| 性亚洲最疯狂xxxx高清| 成人性生交大片免费观看网站| 国产va免费精品高清在线观看| 色成人免费网站| 成人亚洲欧美一区二区三区| 波多野结衣一区二区三区免费视频| 国产精品免费一区二区三区在线观看| 日韩aaa久久蜜桃av| 日韩hmxxxx| 在线观看国产精品入口| 亚洲中文字幕无码av永久| 免费视频久久| 成人性生交视频免费观看| 不卡高清视频专区| 免费黄在线观看| 亚洲精品一二三| 中文字幕精品三级久久久 | 97超碰成人在线| 成人综合婷婷国产精品久久| 亚洲最大成人网站| 中文字幕在线观看不卡视频| 国产在线成人精品午夜| 色婷婷综合激情| 国产区精品在线| 亚洲毛片在线看| www.欧美日本韩国| 日本免费久久高清视频| 精品国产鲁一鲁****| 蜜桃成人在线| 国产精品多人| www.亚洲高清| 99久久精品免费精品国产| 久久久久久成人网| 精品久久久久久亚洲国产300| 亚洲怡红院av| 精品小视频在线| 91一区二区三区在线| 日韩美女免费视频| 成人激情自拍| 一区精品视频| 久久免费高清| 中文字幕天堂av| 中文字幕在线观看一区二区| 亚洲欧美日韩激情| 欧美电视剧在线看免费| 在线观看完整版免费| 97婷婷大伊香蕉精品视频| 成人网av.com/| 日韩经典在线视频| 亚洲一区欧美二区| 超碰caoprom| 一区二区三区四区五区视频在线观看 | 99香蕉国产精品偷在线观看| 两性午夜免费视频| 136国产福利精品导航| 久久久精品视频网站| 亚洲精品国产电影| 色婷婷av在线| 99三级在线| 欧美一区在线看| 91福利免费观看| 国产精品国产三级国产专播品爱网| 久久久精品免费看| 精品奇米国产一区二区三区| www免费在线观看| 91免费高清视频| 99久久夜色精品国产亚洲狼| 亚洲欧美国产中文| 国产精品拍天天在线| 免费在线观看av的网站| 亚洲石原莉奈一区二区在线观看| 日韩伦理福利| 欧美久久电影| 日日摸夜夜添夜夜添精品视频| 99久久久无码国产精品性波多| 亚洲精品日日夜夜| 国内老熟妇对白hdxxxx| 美女视频久久黄| 一区二区三区国产好| 国产精品国产三级国产专区51| 国产精品主播直播| 麻豆成人在线视频| 精品国产乱码久久久久久老虎| 欧美1—12sexvideos| 国产精品久久久久久久小唯西川| 国内精品久久久久久久影视蜜臀| 韩国av中国字幕| 午夜精品久久一牛影视| 亚洲av激情无码专区在线播放| 57pao成人永久免费视频| 清纯唯美亚洲经典中文字幕| 日韩av在线第一页| 久久久久久久久久久久久女国产乱 | 综合精品久久| 成人免费播放视频| 亚洲成人你懂的| 飘雪影视在线观看免费观看| 国产成人极品视频| 日韩毛片视频| 四川一级毛毛片| 精品成人乱色一区二区| 免费一级毛片在线观看| 国产精品电影在线观看| 婷婷久久综合| 国产情侣久久久久aⅴ免费| 无码av中文一区二区三区桃花岛| 亚洲色偷精品一区二区三区| 日韩av色综合| 婷婷久久国产对白刺激五月99| 极品人妻一区二区| 欧美香蕉大胸在线视频观看| av在线天堂| 99国产在线视频| 久久婷婷一区| 日本中文在线视频| 日韩精品免费在线视频观看| 国产精品天堂蜜av在线播放| 草草草视频在线观看| 97se亚洲国产综合自在线不卡| 中文精品久久久久人妻不卡| 色综合老司机第九色激情 | 成人av手机在线观看| 日韩不卡视频在线| 久久精品视频在线播放| 福利片在线一区二区| 亚洲成人天堂网| 亚洲成人免费影院| 秋霞影院午夜丰满少妇在线视频| 成人自拍网站| 蜜臀av性久久久久蜜臀aⅴ流畅| 久久久久成人精品无码| 在线观看精品国产视频| 97青娱国产盛宴精品视频| 亚洲 中文字幕 日韩 无码| 亚洲精品国久久99热| 国产精品久久久久久久龚玥菲| 97久草视频| 蜜臀久久久99精品久久久久久| 日本一区二区欧美|