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

JavaScript 中的生成器有什么用?

開發(fā) 前端
今天我們要講的是JavaScript中一個(gè)不太常用的Generator語法。我很少看到有人在實(shí)際項(xiàng)目開發(fā)中使用它。

今天我們要講的是JavaScript中一個(gè)不太常用的Generator語法。我很少看到有人在實(shí)際項(xiàng)目開發(fā)中使用它。 

可能是因?yàn)樗恼Z法比較復(fù)雜,而且是 async/awiatcan ,所以人們很少使用它。然而,Generatorit 仍然是。

今天我們就從基礎(chǔ)開始練習(xí)Generator。

Generator介紹

JavaScript GeneratorE6是引入的一種新型函數(shù),可以生成多個(gè)值序列,可以暫停和恢復(fù)執(zhí)行,使我們能夠更簡單、高效地實(shí)現(xiàn)迭代器。

如果我們看到一個(gè)函數(shù)后面跟著一個(gè) * 符號(hào),那么它就是一個(gè) Generatorfunction :

function* myGenerator() {
  // Generator function
}

GeneratorFunctions 可以使用yield語句來定義要生成的值的序列。 

每當(dāng)yield語句時(shí),Generator函數(shù)就會(huì)暫停執(zhí)行并返回一個(gè)包含當(dāng)前生成值的對(duì)象,然后執(zhí)行流程將暫停,直到下一次調(diào)用generator函數(shù)。 

它的返回值是一個(gè)迭代器,可以通過調(diào)用 next() 方法來獲取下一個(gè)生成的值。Generator函數(shù)中的所有yield語句都執(zhí)行完畢后,done屬性為true,表示generator函數(shù)已經(jīng)結(jié)束(這里的流程描述比較抽象,后面用實(shí)際案例來解釋會(huì)更好)。

GeneratorFunctions 是 Python 首先從 Coroutine 語言中的 coroutine() 概念演變而來,然后引入到 E6 標(biāo)準(zhǔn)中,希望用它來提高 JavaScript 中處理異步編程的能力。

Generator基本語法

GeneratorFunctions 使用 function*the 關(guān)鍵字定義,它可以包含多個(gè)yield表達(dá)式來控制函數(shù)執(zhí)行的流程:

function* myGenerator() {
  yield 1;
  yield 2;
  yield 3;
}

調(diào)用Generator函數(shù)并不執(zhí)行函數(shù)內(nèi)部的代碼,而是返回一個(gè)迭代器對(duì)象,next()通過調(diào)用這個(gè)對(duì)象的方法來執(zhí)行函數(shù)的代碼,并返回yield表達(dá)式返回的值:

const myGeneratorIterator = myGenerator();
console.log(myGeneratorIterator.next()); // print { value: 1, done: false }
console.log(myGeneratorIterator.next()); // print { value: 2, done: false }
console.log(myGeneratorIterator.next()); // print { value: 3, done: false }
console.log(myGeneratorIterator.next()); // print { value: undefined, done: true }

Generator函數(shù)執(zhí)行過程中,當(dāng)yieldan表達(dá)式時(shí),函數(shù)的執(zhí)行會(huì)被掛起,并將表達(dá)式的值返回給調(diào)用者。 

當(dāng)next()方法時(shí),函數(shù)將從中斷處繼續(xù)執(zhí)行;我們可以在函數(shù)中指定返回一個(gè)最終返回值,該值將被包裝在包含要返回的屬性的完成對(duì)象中:

function* myGenerator() {
  console.log('Start');
  yield 1;
  console.log('Middle');
  yield 2;
  console.log('End');
  return 'Done';
}


const myGeneratorIterator = myGenerator();
console.log(myGeneratorIterator.next()); // print Start, { value: 1, done: false }
console.log(myGeneratorIterator.next()); // print Middle, { value: 2, done: false }
console.log(myGeneratorIterator.next()); // print End, { value: 'Done', done: true }

生成器的高級(jí)使用

yield*表達(dá)式

Yield* 允許 Generatorus 調(diào)用另一個(gè) Generator 函數(shù)或函數(shù)內(nèi)的可迭代對(duì)象。

當(dāng) Generatora 函數(shù)到達(dá)yield*表達(dá)式時(shí),它會(huì)暫停執(zhí)行并將執(zhí)行轉(zhuǎn)移到另一個(gè) Generator 函數(shù)或可迭代對(duì)象。 

執(zhí)行權(quán)不會(huì)返回到原來的Generatorfunction。

function* foo() {
  yield 1;
  yield 2;
}


function* bar() {
  yield* foo();
  yield 3;
}


for (let value of bar()) {
  console.log(value); // print 1, 2, 3
}

在這個(gè)例子中,表達(dá)式inGenerator函數(shù)調(diào)用該函數(shù)并將其迭代結(jié)果依次返回給該函數(shù)。bar()yield* foo()foo()bar()

數(shù)據(jù)交互

在Generator函數(shù)中,可以使用yield表達(dá)式將數(shù)據(jù)返回給調(diào)用者,調(diào)用者next()可以通過Generator方法將數(shù)據(jù)傳遞給函數(shù)。 

這使得調(diào)用者和 Generator 函數(shù)之間能夠進(jìn)行數(shù)據(jù)交互。

function* foo() {
  let x = yield;
  yield x * 2;
}


let gen = foo();
gen.next(); // start generator
gen.next(10); // pass 10,print 20

在這個(gè)例子中,foo()函數(shù)的next()在第一次調(diào)用該方法時(shí)會(huì)停在第一個(gè)yield語句處,等待外部傳入的數(shù)據(jù)。 

然后,當(dāng)next()方法時(shí)將從外部傳入的數(shù)據(jù)作為yield表達(dá)式的值,然后向下執(zhí)行,直到下一個(gè)yield表達(dá)式返回?cái)?shù)據(jù)。

實(shí)際用例

異步編程

GeneratorFunctions 還可以用于實(shí)現(xiàn)異步編程。可以通過調(diào)用next()方法和關(guān)鍵字:yieldPromise來控制函數(shù)的執(zhí)行狀態(tài)

function* myGenerator() {
  const result1 = yield new Promise((resolve) => setTimeout(() => resolve('first'), 1000));
  console.log(result1);
  const result2 = yield new Promise((resolve) => setTimeout(() => resolve('second'), 2000));
  console.log(result2);
  const result3 = yield new Promise((resolve) => setTimeout(() => resolve('third'), 3000));
  console.log(result3);
}


const generator = myGenerator();
const promise = generator.next().value;
promise.then((result) => generator.next(result).value)
  .then((result) => generator.next(result).value)
  .then((result) => generator.next(result).value);

看起來是不是和 async/awaitof 角色很相似,下面是兩種語法的一些比較:

優(yōu)勢(shì):

控制流程更靈活:可以使用 Generator 函數(shù)控制異步操作的執(zhí)行順序,多個(gè)異步操作可以按順序執(zhí)行,每個(gè)操作完成后執(zhí)行下一個(gè)操作,控制流程更靈活。

Generator函數(shù)的狀態(tài)可以復(fù)用:Generator函數(shù)的狀態(tài)可以保存在對(duì)象中,需要的時(shí)候函數(shù)可以繼續(xù)執(zhí)行,并且可以使用保存的狀態(tài)繼續(xù)異步操作。

更通用:GeneratorFunctions 可用于處理各種類型的異步操作,包括事件、回調(diào)、迭代器和 Promisemore 。

缺點(diǎn):

更高的代碼復(fù)雜性:使用 Generator 函數(shù)可能會(huì)增加代碼的復(fù)雜性,因?yàn)樾枰~外的代碼和處理步驟。

可讀性差:對(duì)比async/await,Generator函數(shù)的語法和代碼結(jié)構(gòu)都比較復(fù)雜,可讀性不如async/await。

控制異步進(jìn)程

使用 Generatorfunctions 也非常方便。假設(shè)有一個(gè)需求場(chǎng)景API需要獲取,所有數(shù)據(jù)準(zhǔn)備好后進(jìn)行下一步。 

此時(shí)可以使用Generator函數(shù)讓這個(gè)異步控制流程更加清晰:

function* fetchAllData() {
  const data1 = yield fetch('api1');
  const data2 = yield fetch('api2');
  const data3 = yield fetch('api3');
  return [data1, data2, data3];
}


function run(generator) {
  const iterator = generator();


  function handle(iteratorResult) {
    if (iteratorResult.done) {
      return Promise.resolve(iteratorResult.value);
    }


    return Promise.resolve(iteratorResult.value)
      .then(res => handle(iterator.next(res)));
  }


  return handle(iterator.next());
}


run(fetchAllData).then(data => {
  // handle all data
  console.log(data);
});

處理大數(shù)據(jù)可以節(jié)省內(nèi)存

在處理大數(shù)據(jù)集時(shí),如果一次性將所有數(shù)據(jù)加載到內(nèi)存中,會(huì)造成內(nèi)存浪費(fèi)和程序性能下降。 

Generator函數(shù)可以用來按需處理數(shù)據(jù),將數(shù)據(jù)一一讀取并轉(zhuǎn)換,減少內(nèi)存占用,提高程序性能。

function* dataGenerator() {
  let index = 0;
  while (true) {
    yield index++;
  }
}


function* processData(data, processFn) {
  for (let item of data) {
    yield processFn(item);
  }
}


const data = dataGenerator();


const processedData = processData(data, item => item * 2);


for (let i = 0; i < 500; i++) {
  console.log(processedData.next().value);
}

實(shí)現(xiàn)狀態(tài)機(jī)

GeneratorFunctions 也可用于實(shí)現(xiàn)狀態(tài)機(jī)。狀態(tài)機(jī)是由一組狀態(tài)和狀態(tài)之間的轉(zhuǎn)移規(guī)則組成的數(shù)學(xué)模型,可以用來描述系統(tǒng)的行為和狀態(tài)。 

在實(shí)際開發(fā)中,狀態(tài)機(jī)可以用來處理復(fù)雜的業(yè)務(wù)邏輯,比如表單驗(yàn)證、工作流控制等。

使用Generator函數(shù)實(shí)現(xiàn)狀態(tài)機(jī)的過程如下:

定義狀態(tài)機(jī)的各種狀態(tài),每個(gè)狀態(tài)對(duì)應(yīng)一個(gè) Generatorfunction 。

狀態(tài)之間的轉(zhuǎn)換是使用 Generatorfunction 的 statements.yield 實(shí)現(xiàn)的

調(diào)用Generator函數(shù)時(shí),使用循環(huán)依次執(zhí)行各個(gè)狀態(tài),直到狀態(tài)機(jī)完成。

這是 Generator 實(shí)現(xiàn)的示例:

function* stateMachine() {
  let state = 'start';


  while (true) {
    switch (state) {
      case 'start':
        console.log('Enter start state');
        state = yield 'start';
        break;


      case 'middle':
        console.log('Enter middle state');
        state = yield 'middle';
        break;


      case 'end':
        console.log('Enter end state');
        state = yield 'end';
        break;
    }
  }
}


const sm = stateMachine();


console.log(sm.next().value); // Enter start state
console.log(sm.next('middle').value); // Enter middle state
console.log(sm.next('end').value); // Enter end state

最后

Generator與async/await相比,語法更加復(fù)雜,需要手動(dòng)控制執(zhí)行過程,使用起來相對(duì)麻煩。這也是我很少看到Generatorit被使用的原因之一。

這種語法實(shí)際上并不像看上去那樣簡潔易懂。 

但是在做一些復(fù)雜的控制流和狀態(tài)機(jī)處理的時(shí)候還是很有用的,Generator可以讓我們的流程更加清晰。

責(zé)任編輯:華軒 來源: web前端開發(fā)
相關(guān)推薦

2021-05-27 20:50:28

return生成器參數(shù)

2023-03-01 00:07:32

JavaScript迭代器生成器

2011-12-23 13:42:05

JavaScript

2024-02-19 00:00:00

Python?starmap函數(shù)

2023-12-13 15:28:32

Python工具數(shù)據(jù)

2011-03-22 09:49:25

J-Hi

2025-01-20 09:02:00

列表推導(dǎo)生成器表達(dá)式Python

2025-01-06 09:06:04

JavaScriptWeb 開發(fā)Generators

2021-06-06 16:31:57

PythonPython 3.7 編程語言

2017-09-06 09:26:03

Python生成器協(xié)程

2009-07-01 17:30:14

樣式生成器Visual Stud

2022-02-15 10:30:58

UUID

2024-01-25 10:23:22

對(duì)象存儲(chǔ)存儲(chǔ)數(shù)據(jù)

2009-07-01 17:35:04

樣式生成器Visual Stud

2010-09-07 16:31:17

SQL語句insert

2021-04-22 21:15:38

Generator函數(shù)生成器

2017-07-01 16:02:39

分布式ID生成器

2015-08-25 11:07:58

2025-01-23 08:36:27

CSS開發(fā)工具

2025-11-25 09:24:40

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩超碰人人爽人人做人人添| gogogo高清在线观看免费完整版| 在线不卡视频| 国产午夜精品视频| 五月天六月丁香| 亚洲精品中文字幕| 国产精品视频第一区| 91视频网页| 亚洲成人av影片| 欧美一区二区三区另类| 亚洲美女在线视频| 被黑人猛躁10次高潮视频| 玛雅亚洲电影| 亚洲精品va在线观看| 欧美男人的天堂| 囯产精品久久久久久| 免费观看在线综合色| 国内精品久久久久伊人av| 国产精品1区2区3区4区| 亚洲人亚洲人色久| 亚洲国产精品va| 中文字幕第66页| 电影一区二区| 狠狠躁18三区二区一区| 热久久最新地址| av免费在线一区二区三区| 91老师国产黑色丝袜在线| 91gao视频| 91中文字幕在线播放| 久久亚洲欧美| 欧美亚洲午夜视频在线观看| 青青草激情视频| 91亚洲国产成人久久精品| 亚洲精品自拍视频| 中文字幕人妻一区二区三区| 国产一区二区高清在线| 欧美色图在线观看| 国产精品第12页| 丁香影院在线| 亚洲午夜三级在线| 真人做人试看60分钟免费| 日本激情在线观看| 国产精品三级电影| 日韩电影免费观看在| 日韩在线免费播放| 91麻豆免费观看| 精品国产福利| 亚洲色图 校园春色| av亚洲精华国产精华| 国产精品视频入口| 亚洲精品国产精| 成人91在线观看| 国产精品综合久久久久久| 国内爆初菊对白视频| 懂色一区二区三区免费观看 | 日韩一区二区三区高清| 桃花色综合影院| 2020国产成人综合网| 麻豆av一区二区三区久久| 天堂av网在线| 久久久国产综合精品女国产盗摄| 久久精品国产一区二区三区日韩 | 精品一区二区三区中文字幕视频| 91麻豆精品国产91久久久| 黄色一级片免费播放| 日韩有吗在线观看| 亚洲国产精品va在线| 日韩网站在线播放| 精品一区毛片| 色爱精品视频一区| 欧美 日韩 国产 一区二区三区| 欧美96在线丨欧| 久久久久久69| 中文字幕xxxx| 国产乱码精品1区2区3区| 亚洲自拍偷拍色图| 午夜视频www| 91丨porny丨首页| 日本在线播放一区| 黄色片免费在线观看| 午夜久久久久久电影| 日韩视频在线免费看| 国产一区二区| 亚洲免费人成在线视频观看| 自拍偷拍你懂的| 国模吧视频一区| 欧美在线中文字幕| 亚洲影视一区二区| 丰满亚洲少妇av| 婷婷四房综合激情五月| 日本在线观看网站| 天天操天天干天天综合网| 久久久国产欧美| 4438全国亚洲精品观看视频| 亚洲美女中文字幕| 久草视频免费在线播放| 巨乳诱惑日韩免费av| 91网免费观看| 黄色av免费在线看| 亚洲国产欧美在线| 亚洲综合婷婷久久| 无码日韩精品一区二区免费| 久久亚洲私人国产精品va| av中文在线播放| 国产一区二区三区在线看麻豆| 久久99精品久久久久久久青青日本| eeuss影院www在线观看| 精品欧美国产一区二区三区| 亚洲一区二区中文字幕在线观看| 免费视频一区三区| 性日韩欧美在线视频| 亚洲影院一区二区三区| 国产亚洲精品7777| 日本十八禁视频无遮挡| 韩国一区二区三区视频| 亚洲性线免费观看视频成熟| 久久免费黄色网址| 久久国产精品99久久久久久老狼| 美脚丝袜一区二区三区在线观看| 污污的视频在线观看| 欧美日韩国产一二三| 色无极影院亚洲| 一本久道久久综合狠狠爱| 亚洲综合社区网| 麻豆免费在线视频| 欧美亚洲国产一区在线观看网站| www.超碰97| 亚洲二区视频| av一区二区三区四区电影| 国产福利在线播放麻豆| 欧美日韩日日夜夜| 99精品欧美一区二区| 久久成人国产| 精品国产一区二区三区四区精华| 伦理av在线| 日韩欧美在线观看一区二区三区| 精品在线观看一区| 青椒成人免费视频| 色就是色欧美| 日韩亚洲一区在线播放| 国产一区二区三区在线观看| 国产农村妇女毛片精品久久麻豆 | 国产一区二区三区黄| aa在线视频| 欧美一区二区三区免费大片| 国产aⅴ激情无码久久久无码| 亚洲视频观看| 激情伦成人综合小说| av在线理伦电影| 亚洲福利视频网| 国产剧情在线视频| 91蜜桃在线免费视频| 久草青青在线观看| 精品毛片免费观看| 国产精品日日做人人爱| 欧美激情午夜| 精品日韩av一区二区| 国产乡下妇女做爰毛片| 99re视频这里只有精品| 免费黄色特级片| 欧美色图国产精品| 成人黄色激情网| 伊人影院在线视频| 亚洲精品一区在线观看| 亚洲另类欧美日韩| 国产色婷婷亚洲99精品小说| 一级做a免费视频| 综合一区av| 国模精品娜娜一二三区| 美女日韩欧美| www国产精品视频| а√中文在线资源库| 五月天丁香久久| 91精品国自产在线| 国产成人在线观看免费网站| 日韩av综合在线观看| 日本久久精品| 成人在线观看网址| 韩日精品一区二区| 日韩在线视频网站| 成人免费视频国产| 在线免费观看视频一区| 午夜国产福利一区二区| 91色porny| 五月天视频在线观看| 国产中文一区| 亚洲欧美综合一区| 电影一区二区在线观看| 国产精品成人免费电影| av电影免费在线观看| 亚洲欧美激情另类校园| 国产男男gay体育生白袜| 精品久久在线播放| 中文字幕资源站| 99精品视频在线免费观看| www.色欧美| 国产精品毛片一区二区三区| 欧美少妇一级片| 精品在线播放| 国产91视觉| 少妇高潮一区二区三区99| 亚洲91精品在线观看| 免费看a在线观看| 日韩大片在线观看视频| 99国产在线播放| 欧美亚洲高清一区二区三区不卡| 久久久久久久久久99| 国产精品免费网站在线观看| 欧美肉大捧一进一出免费视频| 久久激情五月激情| 成年人免费在线播放| 国产综合激情| 成人在线免费观看网址| 欧美色图国产精品| 久久综合九色欧美狠狠| 999国产精品一区| 成人av在线网址| 日本综合视频| 欧美最顶级的aⅴ艳星| xxxcom在线观看| 大胆欧美人体视频| 午夜激情视频在线| 国产一区二区三区高清在线观看| 国产小视频免费观看| 欧美一区二区三区四区五区 | 久久精品国产久精国产| 日韩av播放器| 亚洲永久免费精品| 久久精品国产sm调教网站演员| 亚洲最新色图| 一区二区国产日产| 日韩av自拍| 亚洲国产一区二区三区在线| 国产精品三级| 日韩.欧美.亚洲| 精品国产一区二区三区噜噜噜 | 国产精品多人| 黄网站色视频免费观看| 自拍日韩欧美| 超碰人人爱人人| 午夜精品av| 日本一道在线观看| 欧美三级网页| 精品人妻少妇一区二区| 悠悠资源网久久精品| 国产高清av在线播放| 亚洲九九精品| 国内性生活视频| 久久最新视频| 久久久久久久久久久久91| 美腿丝袜一区二区三区| 中文字幕 91| 精彩视频一区二区| 免费黄色av网址| 成人福利在线看| 中文字幕高清视频| 国产欧美一区二区三区鸳鸯浴| 欧美一区二区三区粗大| 中文字幕日韩精品一区| 欧美成人三级视频| 亚洲电影一区二区三区| 丰满少妇xoxoxo视频| 欧美性一区二区| 国产精品热久久| 亚洲精品成人久久电影| 韩国中文字幕2020精品| 日韩在线视频免费观看高清中文 | 亚洲国产成人av网| 国产成人在线免费观看视频| 色94色欧美sute亚洲线路一久| 中文字幕乱码一区二区| 日韩西西人体444www| 天天综合在线视频| 在线观看不卡av| aaa大片在线观看| 欧美又大粗又爽又黄大片视频| 精品肉辣文txt下载| 99久热re在线精品996热视频 | 亚洲精品视频中文字幕| 亚洲免费视频一区二区三区| 欧美国产第二页| 在线观看v片| 91在线国产电影| 欧美一级全黄| 国产又爽又黄ai换脸| 一本久久综合| 男女视频在线观看网站| 91丨porny丨首页| 欧美性猛交xxxxx少妇| 欧美日韩一区二区在线| 国产精品自产拍| 亚洲美女久久久| 三级资源在线| 国产精品一区专区欧美日韩| 猫咪成人在线观看| 午夜啪啪免费视频| 毛片一区二区| 激情av中文字幕| 国产精品欧美一级免费| 亚洲精品视频在线观看免费视频| 欧美精品在线一区二区| 九色在线免费| 国内久久久精品| 国产麻豆一区二区三区| 日本免费高清不卡| 亚洲人人精品| 九九九久久久久久久| 国产日韩欧美电影| 91精品国产乱码久久久张津瑜| 在线不卡免费av| av午夜在线| 国产91免费看片| 国产精品一线| 神马午夜伦理影院| 久久er精品视频| 三上悠亚影音先锋| 天天综合天天做天天综合| www.色视频| 久久中文久久字幕| 日韩电影精品| 亚洲欧美久久久久一区二区三区| 久久午夜精品| 少妇真人直播免费视频| 午夜日韩在线观看| 亚洲欧美另类视频| 欧美巨大黑人极品精男| 国产精品中文| 欧美精品久久96人妻无码| 久久精品999| 激情五月激情综合| 欧美日韩一二三区| 在线免费观看黄色网址| 国产精品日韩电影| 大色综合视频网站在线播放| 国产成人精品视频ⅴa片软件竹菊| 不卡一区在线观看| 欧美成人aaaaⅴ片在线看| 精品日韩在线观看| 久久青青色综合| 国产偷国产偷亚洲高清97cao| 亚洲高清av| 日本丰满少妇裸体自慰 | 久热免费在线观看| 久久久精品黄色| 日韩一级片中文字幕| 最好看的2019的中文字幕视频| 亚洲电影有码| 亚洲欧洲日夜超级视频| 捆绑变态av一区二区三区| 2014亚洲天堂| 欧美成人性战久久| 888av在线视频| 精品一区二区视频| 久久亚洲风情| 国产在视频线精品视频| 欧美美女喷水视频| 色图在线观看| 精品亚洲欧美日韩| 三级亚洲高清视频| 精品视频第一页| 日韩一区二区三区在线视频| 狂野欧美性猛交xxxxx视频| 国产欧美一区二区三区另类精品| 9色国产精品| 精品人体无码一区二区三区| 91精品婷婷国产综合久久性色| 欧洲性视频在线播放| 鲁丝一区鲁丝二区鲁丝三区| 日日摸夜夜添夜夜添精品视频 | 欧美日韩影视| 国产精品视频男人的天堂| 香蕉久久网站| 天堂www中文在线资源| 日本韩国欧美国产| 欧洲不卡视频| 国产区一区二区| 视频一区在线播放| 国产中文字幕久久| 精品成人一区二区| 欧美xxxx做受欧美护士| 中文字幕一区二区三区有限公司 | 色哟哟入口国产精品| 亚洲1区在线观看| 无码无遮挡又大又爽又黄的视频| 中文字幕在线不卡视频| 蜜桃av中文字幕| 国产美女被下药99| 1024日韩| 成人黄色短视频| 亚洲丁香婷深爱综合| 巨大黑人极品videos精品| 久久久久久久9| 欧美国产乱子伦| 色综合免费视频| 91精品视频免费看| 日日欢夜夜爽一区| 久久99久久98精品免观看软件| 中文在线资源观看视频网站免费不卡| 亚洲一区二区电影| 日本激情视频在线播放|