日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Generator 函数的异步应用

發布時間:2023/12/10 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Generator 函数的异步应用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

異步編程對 JavaScript 語言太重要。Javascript 語言的執行環境是“單線程”的,如果沒有異步編程,根本沒法用,非卡死不可。本章主要介紹 Generator 函數如何完成異步操作。

傳統方法

ES6 誕生以前,異步編程的方法,大概有下面四種。

  • 回調函數
  • 事件監聽
  • 發布/訂閱
  • Promise 對象

Generator 函數將 JavaScript 異步編程帶入了一個全新的階段。

基本概念

異步

所謂"異步",簡單說就是一個任務不是連續完成的,可以理解成該任務被人為分成兩段,先執行第一段,然后轉而執行其他任務,等做好了準備,再回過頭執行第二段。

比如,有一個任務是讀取文件進行處理,任務的第一段是向操作系統發出請求,要求讀取文件。然后,程序執行其他任務,等到操作系統返回文件,再接著執行任務的第二段(處理文件)。這種不連續的執行,就叫做異步。

相應地,連續的執行就叫做同步。由于是連續執行,不能插入其他任務,所以操作系統從硬盤讀取文件的這段時間,程序只能干等著。

回調函數

JavaScript 語言對異步編程的實現,就是回調函數。所謂回調函數,就是把任務的第二段單獨寫在一個函數里面,等到重新執行這個任務的時候,就直接調用這個函數。回調函數的英語名字callback,直譯過來就是"重新調用"。

讀取文件進行處理,是這樣寫的。

fs.readFile('/etc/passwd', 'utf-8', function (err, data) { if (err) throw err; console.log(data); });

上面代碼中,readFile函數的第三個參數,就是回調函數,也就是任務的第二段。等到操作系統返回了/etc/passwd這個文件以后,回調函數才會執行。

一個有趣的問題是,為什么 Node 約定,回調函數的第一個參數,必須是錯誤對象err(如果沒有錯誤,該參數就是null)?

原因是執行分成兩段,第一段執行完以后,任務所在的上下文環境就已經結束了。在這以后拋出的錯誤,原來的上下文環境已經無法捕捉,只能當作參數,傳入第二段。

Promise

回調函數本身并沒有問題,它的問題出現在多個回調函數嵌套。假定讀取A文件之后,再讀取B文件,代碼如下。

fs.readFile(fileA, 'utf-8', function (err, data) { fs.readFile(fileB, 'utf-8', function (err, data) { // ... }); });

不難想象,如果依次讀取兩個以上的文件,就會出現多重嵌套。代碼不是縱向發展,而是橫向發展,很快就會亂成一團,無法管理。因為多個異步操作形成了強耦合,只要有一個操作需要修改,它的上層回調函數和下層回調函數,可能都要跟著修改。這種情況就稱為"回調函數地獄"(callback hell)。

Promise 對象就是為了解決這個問題而提出的。它不是新的語法功能,而是一種新的寫法,允許將回調函數的嵌套,改成鏈式調用。采用 Promise,連續讀取多個文件,寫法如下。

var readFile = require('fs-readfile-promise'); readFile(fileA) .then(function (data) { console.log(data.toString()); }) .then(function () { return readFile(fileB); }) .then(function (data) { console.log(data.toString()); }) .catch(function (err) { console.log(err); });

上面代碼中,我使用了fs-readfile-promise模塊,它的作用就是返回一個 Promise 版本的readFile函數。Promise 提供then方法加載回調函數,catch方法捕捉執行過程中拋出的錯誤。

可以看到,Promise 的寫法只是回調函數的改進,使用then方法以后,異步任務的兩段執行看得更清楚了,除此以外,并無新意。

Promise 的最大問題是代碼冗余,原來的任務被 Promise 包裝了一下,不管什么操作,一眼看去都是一堆then,原來的語義變得很不清楚。

那么,有沒有更好的寫法呢?

Generator 函數

協程

傳統的編程語言,早有異步編程的解決方案(其實是多任務的解決方案)。其中有一種叫做"協程"(coroutine),意思是多個線程互相協作,完成異步任務。

協程有點像函數,又有點像線程。它的運行流程大致如下。

  • 第一步,協程A開始執行。
  • 第二步,協程A執行到一半,進入暫停,執行權轉移到協程B。
  • 第三步,(一段時間后)協程B交還執行權。
  • 第四步,協程A恢復執行。

上面流程的協程A,就是異步任務,因為它分成兩段(或多段)執行。

舉例來說,讀取文件的協程寫法如下。

function* asyncJob() { // ...其他代碼 var f = yield readFile(fileA); // ...其他代碼 }

上面代碼的函數asyncJob是一個協程,它的奧妙就在其中的yield命令。它表示執行到此處,執行權將交給其他協程。也就是說,yield命令是異步兩個階段的分界線。

協程遇到yield命令就暫停,等到執行權返回,再從暫停的地方繼續往后執行。它的最大優點,就是代碼的寫法非常像同步操作,如果去除yield命令,簡直一模一樣。

協程的 Generator 函數實現

Generator 函數是協程在 ES6 的實現,最大特點就是可以交出函數的執行權(即暫停執行)。

整個 Generator 函數就是一個封裝的異步任務,或者說是異步任務的容器。異步操作需要暫停的地方,都用yield語句注明。Generator 函數的執行方法如下。

function* gen(x) { var y = yield x + 2; return y; } var g = gen(1); g.next() // { value: 3, done: false } g.next() // { value: undefined, done: true }

上面代碼中,調用 Generator 函數,會返回一個內部指針(即遍歷器)g。這是 Generator 函數不同于普通函數的另一個地方,即執行它不會返回結果,返回的是指針對象。調用指針g的next方法,會移動內部指針(即執行異步任務的第一段),指向第一個遇到的yield語句,上例是執行到x + 2為止。

換言之,next方法的作用是分階段執行Generator函數。每次調用next方法,會返回一個對象,表示當前階段的信息(value屬性和done屬性)。value屬性是yield語句后面表達式的值,表示當前階段的值;done屬性是一個布爾值,表示 Generator 函數是否執行完畢,即是否還有下一個階段。

Generator 函數的數據交換和錯誤處理

Generator 函數可以暫停執行和恢復執行,這是它能封裝異步任務的根本原因。除此之外,它還有兩個特性,使它可以作為異步編程的完整解決方案:函數體內外的數據交換和錯誤處理機制。

next返回值的 value 屬性,是 Generator 函數向外輸出數據;next方法還可以接受參數,向 Generator 函數體內輸入數據。

function* gen(x){ var y = yield x + 2; return y; } var g = gen(1); g.next() // { value: 3, done: false } g.next(2) // { value: 2, done: true }

上面代碼中,第一個next方法的value屬性,返回表達式x + 2的值3。第二個next方法帶有參數2,這個參數可以傳入 Generator 函數,作為上個階段異步任務的返回結果,被函數體內的變量y接收。因此,這一步的value屬性,返回的就是2(變量y的值)。

Generator 函數內部還可以部署錯誤處理代碼,捕獲函數體外拋出的錯誤。

function* gen(x){ try { var y = yield x + 2; } catch (e){ console.log(e); } return y; } var g = gen(1); g.next(); g.throw('出錯了'); // 出錯了

上面代碼的最后一行,Generator 函數體外,使用指針對象的throw方法拋出的錯誤,可以被函數體內的try...catch代碼塊捕獲。這意味著,出錯的代碼與處理錯誤的代碼,實現了時間和空間上的分離,這對于異步編程無疑是很重要的。

異步任務的封裝

下面看看如何使用 Generator 函數,執行一個真實的異步任務。

var fetch = require('node-fetch'); function* gen(){ var url = 'https://api.github.com/users/github'; var result = yield fetch(url); console.log(result.bio); }

上面代碼中,Generator 函數封裝了一個異步操作,該操作先讀取一個遠程接口,然后從 JSON 格式的數據解析信息。就像前面說過的,這段代碼非常像同步操作,除了加上了yield命令。

執行這段代碼的方法如下。

var g = gen(); var result = g.next(); result.value.then(function(data){ return data.json(); }).then(function(data){ g.next(data); });

上面代碼中,首先執行 Generator 函數,獲取遍歷器對象,然后使用next方法(第二行),執行異步任務的第一階段。由于Fetch模塊返回的是一個 Promise 對象,因此要用then方法調用下一個next方法。

可以看到,雖然 Generator 函數將異步操作表示得很簡潔,但是流程管理卻不方便(即何時執行第一階段、何時執行第二階段)。

Thunk 函數

Thunk 函數是自動執行 Generator 函數的一種方法。

參數的求值策略

Thunk 函數早在上個世紀 60 年代就誕生了。

那時,編程語言剛剛起步,計算機學家還在研究,編譯器怎么寫比較好。一個爭論的焦點是"求值策略",即函數的參數到底應該何時求值。

var x = 1; function f(m) { return m * 2; } f(x + 5)

上面代碼先定義函數f,然后向它傳入表達式x + 5。請問,這個表達式應該何時求值?

一種意見是"傳值調用"(call by value),即在進入函數體之前,就計算x + 5的值(等于 6),再將這個值傳入函數f。C 語言就采用這種策略。

f(x + 5) // 傳值調用時,等同于 f(6)

另一種意見是“傳名調用”(call by name),即直接將表達式x + 5傳入函數體,只在用到它的時候求值。Haskell 語言采用這種策略。

f(x + 5) // 傳名調用時,等同于 (x + 5) * 2

傳值調用和傳名調用,哪一種比較好?

回答是各有利弊。傳值調用比較簡單,但是對參數求值的時候,實際上還沒用到這個參數,有可能造成性能損失。

function f(a, b){ return b; } f(3 * x * x - 2 * x - 1, x);

上面代碼中,函數f的第一個參數是一個復雜的表達式,但是函數體內根本沒用到。對這個參數求值,實際上是不必要的。因此,有一些計算機學家傾向于"傳名調用",即只在執行時求值。

Thunk 函數的含義

編譯器的“傳名調用”實現,往往是將參數放到一個臨時函數之中,再將這個臨時函數傳入函數體。這個臨時函數就叫做 Thunk 函數。

function f(m) { return m * 2; } f(x + 5); // 等同于 var thunk = function () { return x + 5; }; function f(thunk) { return thunk() * 2; }

上面代碼中,函數 f 的參數x + 5被一個函數替換了。凡是用到原參數的地方,對Thunk函數求值即可。

這就是 Thunk 函數的定義,它是“傳名調用”的一種實現策略,用來替換某個表達式。

JavaScript 語言的 Thunk 函數

JavaScript 語言是傳值調用,它的 Thunk 函數含義有所不同。在 JavaScript 語言中,Thunk 函數替換的不是表達式,而是多參數函數,將其替換成一個只接受回調函數作為參數的單參數函數。

// 正常版本的readFile(多參數版本) fs.readFile(fileName, callback); // Thunk版本的readFile(單參數版本) var Thunk = function (fileName) { return function (callback) { return fs.readFile(fileName, callback); }; }; var readFileThunk = Thunk(fileName); readFileThunk(callback);

上面代碼中,fs模塊的readFile方法是一個多參數函數,兩個參數分別為文件名和回調函數。經過轉換器處理,它變成了一個單參數函數,只接受回調函數作為參數。這個單參數版本,就叫做 Thunk 函數。

任何函數,只要參數有回調函數,就能寫成 Thunk 函數的形式。下面是一個簡單的 Thunk 函數轉換器。

// ES5版本 var Thunk = function(fn){ return function (){ var args = Array.prototype.slice.call(arguments); return function (callback){ args.push(callback); return fn.apply(this, args); } }; }; // ES6版本 const Thunk = function(fn) { return function (...args) { return function (callback) { return fn.call(this, ...args, callback); } }; };

使用上面的轉換器,生成fs.readFile的 Thunk 函數。

var readFileThunk = Thunk(fs.readFile); readFileThunk(fileA)(callback);

下面是另一個完整的例子。

function f(a, cb) { cb(a); } const ft = Thunk(f); ft(1)(console.log) // 1

Thunkify 模塊

生產環境的轉換器,建議使用 Thunkify 模塊。

首先是安裝。

$ npm install thunkify

使用方式如下。

var thunkify = require('thunkify'); var fs = require('fs'); var read = thunkify(fs.readFile); read('package.json')(function(err, str){ // ... });

Thunkify 的源碼與上一節那個簡單的轉換器非常像。

function thunkify(fn) { return function() { var args = new Array(arguments.length); var ctx = this; for (var i = 0; i < args.length; ++i) { args[i] = arguments[i]; } return function (done) { var called; args.push(function () { if (called) return; called = true; done.apply(null, arguments); }); try { fn.apply(ctx, args); } catch (err) { done(err); } } } };

它的源碼主要多了一個檢查機制,變量called確保回調函數只運行一次。這樣的設計與下文的 Generator 函數相關。請看下面的例子。

function f(a, b, callback){ var sum = a + b; callback(sum); callback(sum); } var ft = thunkify(f); var print = console.log.bind(console); ft(1, 2)(print); // 3

上面代碼中,由于thunkify只允許回調函數執行一次,所以只輸出一行結果。

Generator 函數的流程管理

你可能會問, Thunk 函數有什么用?回答是以前確實沒什么用,但是 ES6 有了 Generator 函數,Thunk 函數現在可以用于 Generator 函數的自動流程管理。

Generator 函數可以自動執行。

function* gen() { // ... } var g = gen(); var res = g.next(); while(!res.done){ console.log(res.value); res = g.next(); }

上面代碼中,Generator 函數gen會自動執行完所有步驟。

但是,這不適合異步操作。如果必須保證前一步執行完,才能執行后一步,上面的自動執行就不可行。這時,Thunk 函數就能派上用處。以讀取文件為例。下面的 Generator 函數封裝了兩個異步操作。

var fs = require('fs'); var thunkify = require('thunkify'); var readFileThunk = thunkify(fs.readFile); var gen = function* (){ var r1 = yield readFileThunk('/etc/fstab'); console.log(r1.toString()); var r2 = yield readFileThunk('/etc/shells'); console.log(r2.toString()); };

上面代碼中,yield命令用于將程序的執行權移出 Generator 函數,那么就需要一種方法,將執行權再交還給 Generator 函數。

這種方法就是 Thunk 函數,因為它可以在回調函數里,將執行權交還給 Generator 函數。為了便于理解,我們先看如何手動執行上面這個 Generator 函數。

var g = gen(); var r1 = g.next(); r1.value(function (err, data) { if (err) throw err; var r2 = g.next(data); r2.value(function (err, data) { if (err) throw err; g.next(data); }); });

上面代碼中,變量g是 Generator 函數的內部指針,表示目前執行到哪一步。next方法負責將指針移動到下一步,并返回該步的信息(value屬性和done屬性)。

仔細查看上面的代碼,可以發現 Generator 函數的執行過程,其實是將同一個回調函數,反復傳入next方法的value屬性。這使得我們可以用遞歸來自動完成這個過程。

Thunk 函數的自動流程管理

Thunk 函數真正的威力,在于可以自動執行 Generator 函數。下面就是一個基于 Thunk 函數的 Generator 執行器。

function run(fn) { var gen = fn(); function next(err, data) { var result = gen.next(data); if (result.done) return; result.value(next); } next(); } function* g() { // ... } run(g);

上面代碼的run函數,就是一個 Generator 函數的自動執行器。內部的next函數就是 Thunk 的回調函數。next函數先將指針移到 Generator 函數的下一步(gen.next方法),然后判斷 Generator 函數是否結束(result.done屬性),如果沒結束,就將next函數再傳入 Thunk 函數(result.value屬性),否則就直接退出。

有了這個執行器,執行 Generator 函數方便多了。不管內部有多少個異步操作,直接把 Generator 函數傳入run函數即可。當然,前提是每一個異步操作,都要是 Thunk 函數,也就是說,跟在yield命令后面的必須是 Thunk 函數。

var g = function* (){ var f1 = yield readFileThunk('fileA'); var f2 = yield readFileThunk('fileB'); // ... var fn = yield readFileThunk('fileN'); }; run(g);

上面代碼中,函數g封裝了n個異步的讀取文件操作,只要執行run函數,這些操作就會自動完成。這樣一來,異步操作不僅可以寫得像同步操作,而且一行代碼就可以執行。

Thunk 函數并不是 Generator 函數自動執行的唯一方案。因為自動執行的關鍵是,必須有一種機制,自動控制 Generator 函數的流程,接收和交還程序的執行權。回調函數可以做到這一點,Promise 對象也可以做到這一點。

co 模塊

基本用法

co 模塊是著名程序員 TJ Holowaychuk 于 2013 年 6 月發布的一個小工具,用于 Generator 函數的自動執行。

下面是一個 Generator 函數,用于依次讀取兩個文件。

var gen = function* () { var f1 = yield readFile('/etc/fstab'); var f2 = yield readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString()); };

co 模塊可以讓你不用編寫 Generator 函數的執行器。

var co = require('co'); co(gen);

上面代碼中,Generator 函數只要傳入co函數,就會自動執行。

co函數返回一個Promise對象,因此可以用then方法添加回調函數。

co(gen).then(function (){ console.log('Generator 函數執行完成'); });

上面代碼中,等到 Generator 函數執行結束,就會輸出一行提示。

co 模塊的原理

為什么 co 可以自動執行 Generator 函數?

前面說過,Generator 就是一個異步操作的容器。它的自動執行需要一種機制,當異步操作有了結果,能夠自動交回執行權。

兩種方法可以做到這一點。

(1)回調函數。將異步操作包裝成 Thunk 函數,在回調函數里面交回執行權。

(2)Promise 對象。將異步操作包裝成 Promise 對象,用then方法交回執行權。

co 模塊其實就是將兩種自動執行器(Thunk 函數和 Promise 對象),包裝成一個模塊。使用 co 的前提條件是,Generator 函數的yield命令后面,只能是 Thunk 函數或 Promise 對象。如果數組或對象的成員,全部都是 Promise 對象,也可以使用 co,詳見后文的例子。

上一節已經介紹了基于 Thunk 函數的自動執行器。下面來看,基于 Promise 對象的自動執行器。這是理解 co 模塊必須的。

基于 Promise 對象的自動執行

還是沿用上面的例子。首先,把fs模塊的readFile方法包裝成一個 Promise 對象。

var fs = require('fs'); var readFile = function (fileName){ return new Promise(function (resolve, reject){ fs.readFile(fileName, function(error, data){ if (error) return reject(error); resolve(data); }); }); }; var gen = function* (){ var f1 = yield readFile('/etc/fstab'); var f2 = yield readFile('/etc/shells'); console.log(f1.toString()); console.log(f2.toString()); };

然后,手動執行上面的 Generator 函數。

var g = gen(); g.next().value.then(function(data){ g.next(data).value.then(function(data){ g.next(data); }); });

手動執行其實就是用then方法,層層添加回調函數。理解了這一點,就可以寫出一個自動執行器。

function run(gen){ var g = gen(); function next(data){ var result = g.next(data); if (result.done) return result.value; result.value.then(function(data){ next(data); }); } next(); } run(gen);

上面代碼中,只要 Generator 函數還沒執行到最后一步,next函數就調用自身,以此實現自動執行。

co 模塊的源碼

co 就是上面那個自動執行器的擴展,它的源碼只有幾十行,非常簡單。

首先,co 函數接受 Generator 函數作為參數,返回一個 Promise 對象。

function co(gen) { var ctx = this; return new Promise(function(resolve, reject) { }); }

在返回的 Promise 對象里面,co 先檢查參數gen是否為 Generator 函數。如果是,就執行該函數,得到一個內部指針對象;如果不是就返回,并將 Promise 對象的狀態改為resolved。

function co(gen) { var ctx = this; return new Promise(function(resolve, reject) { if (typeof gen === 'function') gen = gen.call(ctx); if (!gen || typeof gen.next !== 'function') return resolve(gen); }); }

接著,co 將 Generator 函數的內部指針對象的next方法,包裝成onFulfilled函數。這主要是為了能夠捕捉拋出的錯誤。

function co(gen) { var ctx = this; return new Promise(function(resolve, reject) { if (typeof gen === 'function') gen = gen.call(ctx); if (!gen || typeof gen.next !== 'function') return resolve(gen); onFulfilled(); function onFulfilled(res) { var ret; try { ret = gen.next(res); } catch (e) { return reject(e); } next(ret); } }); }

最后,就是關鍵的next函數,它會反復調用自身。

function next(ret) { if (ret.done) return resolve(ret.value); var value = toPromise.call(ctx, ret.value); if (value && isPromise(value)) return value.then(onFulfilled, onRejected); return onRejected( new TypeError( 'You may only yield a function, promise, generator, array, or object, ' + 'but the following object was passed: "' + String(ret.value) + '"' ) ); }

上面代碼中,next函數的內部代碼,一共只有四行命令。

第一行,檢查當前是否為 Generator 函數的最后一步,如果是就返回。

第二行,確保每一步的返回值,是 Promise 對象。

第三行,使用then方法,為返回值加上回調函數,然后通過onFulfilled函數再次調用next函數。

第四行,在參數不符合要求的情況下(參數非 Thunk 函數和 Promise 對象),將 Promise 對象的狀態改為rejected,從而終止執行。

處理并發的異步操作

co 支持并發的異步操作,即允許某些操作同時進行,等到它們全部完成,才進行下一步。

這時,要把并發的操作都放在數組或對象里面,跟在yield語句后面。

// 數組的寫法 co(function* () { var res = yield [ Promise.resolve(1), Promise.resolve(2) ]; console.log(res); }).catch(onerror); // 對象的寫法 co(function* () { var res = yield { 1: Promise.resolve(1), 2: Promise.resolve(2), }; console.log(res); }).catch(onerror);

下面是另一個例子。

co(function* () { var values = [n1, n2, n3]; yield values.map(somethingAsync); }); function* somethingAsync(x) { // do something async return y }

上面的代碼允許并發三個somethingAsync異步操作,等到它們全部完成,才會進行下一步。

實例:處理 Stream

Node 提供 Stream 模式讀寫數據,特點是一次只處理數據的一部分,數據分成一塊塊依次處理,就好像“數據流”一樣。這對于處理大規模數據非常有利。Stream 模式使用 EventEmitter API,會釋放三個事件。

  • data事件:下一塊數據塊已經準備好了。
  • end事件:整個“數據流”處理“完了。
  • error事件:發生錯誤。

使用Promise.race()函數,可以判斷這三個事件之中哪一個最先發生,只有當data事件最先發生時,才進入下一個數據塊的處理。從而,我們可以通過一個while循環,完成所有數據的讀取。

const co = require('co'); const fs = require('fs'); const stream = fs.createReadStream('./les_miserables.txt'); let valjeanCount = 0; co(function*() { while(true) { const res = yield Promise.race([ new Promise(resolve => stream.once('data', resolve)), new Promise(resolve => stream.once('end', resolve)), new Promise((resolve, reject) => stream.once('error', reject)) ]); if (!res) { break; } stream.removeAllListeners('data'); stream.removeAllListeners('end'); stream.removeAllListeners('error'); valjeanCount += (res.toString().match(/valjean/ig) || []).length; } console.log('count:', valjeanCount); // count: 1120 });

上面代碼采用 Stream 模式讀取《悲慘世界》的文本文件,對于每個數據塊都使用stream.once方法,在data、end、error三個事件上添加一次性回調函數。變量res只有在data事件發生時才有值,然后累加每個數據塊之中valjean這個詞出現的次數。

轉載于:https://www.cnblogs.com/navysummer/p/9682244.html

總結

以上是生活随笔為你收集整理的Generator 函数的异步应用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

国产成人精品免费在线观看 | 国产一区在线视频播放 | 日韩在线理论 | 三级动图 | 黄色天堂在线观看 | 狠狠狠狠狠狠狠 | 欧美aⅴ在线观看 | 久久免费视频这里只有精品 | 国产福利精品一区二区 | 亚洲国产精品女人久久久 | 日韩免费一二三区 | 亚洲精品tv久久久久久久久久 | 超碰在线免费97 | 国产精品乱码久久久久 | 国产精品久久久久久久99 | 日日夜夜人人天天 | 在线看片一区 | 综合色影院 | 亚洲精品国产综合99久久夜夜嗨 | 人人爽人人射 | 成人黄色在线看 | 日本在线精品视频 | 狠狠操天天射 | 麻豆久久久久久久 | 国产一级在线视频 | 美女国内精品自产拍在线播放 | 亚洲jizzjizz日本少妇 | 成人免费看片网址 | 狠狠色噜噜狠狠狠狠2021天天 | 深爱婷婷激情 | 成人午夜免费剧场 | 国产亚洲久久 | 国产高清视频网 | 国内精品免费 | 六月色丁 | 日韩欧美精品在线观看 | 亚洲精品小视频 | 日本久久久影视 | 欧美精品一区在线发布 | 欧美日韩在线免费观看视频 | 久久专区| 日本久久电影 | 天天搞天天| 久草在线视频网站 | 久久综合网色—综合色88 | 午夜少妇av | 最近中文字幕久久 | 久久综合色影院 | 99久久精品国产一区二区成人 | 久久久久| 91精品专区| 成人中文字幕av | 九色视频网址 | 久久久久久久国产精品视频 | 91九色视频观看 | 十八岁以下禁止观看的1000个网站 | 久久综合欧美精品亚洲一区 | 精品国产乱子伦一区二区 | 97超碰精品 | 五月婷婷丁香综合 | 国产短视频在线播放 | 中文字幕在线乱 | 揉bbb玩bbb少妇bbb | 国产精品12 | 五月婷婷开心中文字幕 | 中文字幕一区二区三区四区久久 | 久久爱影视i | 在线免费视频a | 日韩久久精品一区二区三区下载 | 久久观看最新视频 | 国产高清不卡在线 | 免费观看性生活大片3 | 中文字幕在线高清 | 国产视频色 | 中文字幕高清免费日韩视频在线 | 91超级碰碰| 4438全国亚洲精品在线观看视频 | 在线观看岛国 | av电影av在线 | 成人黄色小说网 | 国产精品久久久99 | 成人手机在线视频 | 成人av在线影视 | 97人人添人澡人人爽超碰动图 | 人人玩人人添人人澡97 | 97夜夜澡人人双人人人喊 | 日本在线观看中文字幕无线观看 | 亚洲春色奇米影视 | 国产精品久久久久久麻豆一区 | 亚洲欧洲精品视频 | a在线观看国产 | 久热只有精品 | 亚洲高清视频一区二区三区 | 在线色资源| 色综合久久久久综合体 | 一区二区三区四区在线 | 国产欧美精品xxxx另类 | 欧美在线视频a | 国产一区视频免费在线观看 | 在线免费性生活片 | 白丝av免费观看 | 久久久香蕉视频 | 亚洲欧美乱综合图片区小说区 | 91社区国产高清 | 久草网站在线观看 | 最新真实国产在线视频 | 日韩.com| 色婷婷久久久综合中文字幕 | 最新国产精品久久精品 | 久久久www| 九九热视频在线免费观看 | 久草久热 | 亚洲精品国产欧美在线观看 | 99精品福利视频 | 97超碰人人澡人人爱 | 日韩欧美第二页 | 精品一区久久 | 成人av片在线观看 | 狠狠躁夜夜躁人人爽超碰97香蕉 | 97精品国产97久久久久久 | 玖玖爱免费视频 | 久av电影 | 麻豆视频在线免费观看 | 视频福利在线观看 | japanese黑人亚洲人4k | 成年人在线观看视频免费 | 日日干av | 在线观看一区 | 日日成人网 | 日韩欧美大片免费观看 | 手机看片午夜 | 一级久久精品 | 久久国产高清视频 | 在线91播放 | 精品在线观看一区二区三区 | 九九视频这里只有精品 | 黄色网大全 | 日韩中文字幕免费视频 | 免费人成在线观看网站 | 亚洲成av| av片免费播放 | 99婷婷狠狠成为人免费视频 | 亚洲精品一区二区三区高潮 | 夜夜操天天干 | 欧美孕交vivoestv另类 | 亚洲精品成人免费 | 人人干人人干人人干 | 91禁在线看 | 久久久资源 | 天天天射 | 精品国产一区二区三区四 | 五月婷婷天堂 | 日本三级久久 | 亚洲精品视频一 | 国产精品综合久久久 | 99精品免费 | 天天天天天天天天操 | 国产字幕av | 麻豆 free xxxx movies hd| 日韩av电影国产 | 国产一级免费观看 | 最近中文字幕完整高清 | 在线观看日本高清mv视频 | 久久影院中文字幕 | 成人小视频免费在线观看 | 波多野结衣在线观看一区二区三区 | 在线a视频免费观看 | 97成人在线 | 欧美日韩一区二区三区在线观看视频 | 国产成人久久久77777 | 日韩丝袜 | 99性视频 | 欧美另类网站 | 久久久久久久久爱 | 99久久视频| 国外成人在线视频网站 | 成人av资源 | 99久久久久成人国产免费 | av 一区二区三区 | 色欧美日韩 | 中文字幕在线一区二区三区 | 欧美日韩国产精品一区二区 | 黄色a大片 | 五月婷婷激情综合 | 久久久久免费观看 | 亚洲国产小视频在线观看 | 91亚洲精品国产 | 亚洲乱亚洲乱亚洲 | 国产精品免费小视频 | 在线观看日本高清mv视频 | 国产在线精品视频 | 午夜av一区二区三区 | 一区二区三区视频网站 | 亚洲黄色app | 在线观看理论 | 91少妇精拍在线播放 | 国产精品成人国产乱 | 欧美aaa大片 | 青青河边草手机免费 | 久久av免费 | 亚洲国产影院av久久久久 | 极品久久久久久久 | 日韩三级视频在线看 | 天天色天天射天天干 | 国产黄视频在线观看 | www.eeuss影院av撸 | 国产高清av免费在线观看 | av在线网站大全 | 中文字幕黄色av | 日日精品 | 成年人在线观看视频免费 | 国产精彩在线视频 | 欧美日韩视频在线一区 | 日韩最新中文字幕 | 在线观看国产日韩 | 久久久国产99久久国产一 | 午夜性生活片 | 久久视频免费在线 | 日韩欧美国产精品 | 黄色a三级| 午夜视频黄 | 国产精品久久久久婷婷二区次 | 婷婷激情欧美 | 91传媒视频在线观看 | 久久久亚洲电影 | 色综合天天视频在线观看 | 99久久精品免费一区 | 国产精品国产毛片 | 久久精品国产免费看久久精品 | 国产流白浆高潮在线观看 | 婷婷丁香激情网 | 亚洲欧美国产精品va在线观看 | 国产69久久精品成人看 | 91正在播放 | 超碰免费成人 | 久草在线视频看看 | 精品99久久 | av经典在线 | 亚洲伊人第一页 | 免费福利视频网 | 婷婷综合亚洲 | 日韩在线首页 | 中文字幕资源网在线观看 | 99 色| 日韩精品中文字幕一区二区 | 久久一区二区三区国产精品 | 91久久精品日日躁夜夜躁国产 | 欧洲精品码一区二区三区免费看 | 欧美少妇的秘密 | 久久99国产综合精品 | 亚洲精品久久久久中文字幕二区 | 青青视频一区 | 三级黄色片在线观看 | 成人午夜电影久久影院 | 成人免费看电影 | 久久免费国产视频 | 五月婷视频 | 最近中文字幕在线中文高清版 | 国产精品网红福利 | 国内精品久久久久影院男同志 | 久久99热这里只有精品 | 韩国视频一区二区三区 | 91精品影视 | 国产在线精品区 | 国产精品成人av在线 | 日韩免费视频播放 | 在线91视频 | 一区二区精品在线视频 | 91免费高清观看 | 日本久久久久久 | 成人av中文字幕 | 国产精品久久久久久久久久不蜜月 | 在线观看第一页 | 久草97| 国产精品黄网站在线观看 | 国产一区福利在线 | 国产不卡一二三区 | 中文字幕国产在线 | 91久久偷偷做嫩草影院 | 黄色国产高清 | 色视频网页 | 日本女人在线观看 | 欧美亚洲精品在线观看 | 黄在线免费看 | 久久精品7 | 99精品欧美一区二区三区 | 国产精品久久久av | 99资源网 | 福利av影院 | 欧美一级片在线免费观看 | 国产免费观看高清完整版 | 亚洲影视九九影院在线观看 | 免费av 在线| 美女一二三区 | 在线免费观看国产黄色 | 91桃色免费观看 | 在线观看亚洲视频 | 国产精品免费视频一区二区 | 人人干人人搞 | 91九色porny蝌蚪视频 | 欧美国产不卡 | 免费亚洲精品视频 | 亚洲黄色免费观看 | 久久久精品国产免费观看一区二区 | 国产精品视频免费在线观看 | 国产在线观看免 | 国产一级电影免费观看 | 久久久色 | 狠狠狠色丁香综合久久天下网 | 国产欧美最新羞羞视频在线观看 | 狠狠的日日 | av一级久久| 精品综合久久 | 91精选在线观看 | 亚洲 欧美 变态 国产 另类 | 国产第一页在线播放 | www成人精品 | 成人在线一区二区三区 | 国内精品毛片 | 99久久99视频 | 国色天香在线观看 | av3级在线 | 国产a视频免费观看 | 色资源在线 | 国产欧美精品一区二区三区四区 | 久久久久久高清 | 日本狠狠色 | 草久在线 | 亚洲区视频在线观看 | 最近日本韩国中文字幕 | 久久久午夜精品福利内容 | 国产一二三精品 | 国产精品久久久久久久久久直播 | 久久久久久久久黄色 | 一区二区三区精品在线 | 日韩久久电影 | 国产女人40精品一区毛片视频 | 全黄色一级片 | 91麻豆免费看 | 久久这里| 六月天综合网 | 999久久久国产精品 高清av免费观看 | 狠狠干天天色 | 日韩在线中文字幕视频 | 日韩日韩日韩日韩 | 免费国产亚洲视频 | 亚洲精品xxxx| 欧美91精品国产自产 | 久久久久久久久久电影 | 免费黄色网址网站 | 91香蕉国产在线观看软件 | 久久国产欧美日韩 | 在线va网站| 国产精品 视频 | 在线小视频你懂得 | 国产真实在线 | 欧美日韩视频免费看 | 日韩精品专区在线影院重磅 | 天天综合网天天综合色 | 97在线观| 四虎永久网站 | 一区二区精 | av黄色国产| 国产精品每日更新 | 一级片免费视频 | 天天干天天做 | 国产精品久久婷婷六月丁香 | 国产高清av | 欧美日韩免费一区二区 | 亚洲精品色婷婷 | 在线视频福利 | 亚洲另类交 | 亚洲精品黄色在线观看 | 中文字幕在线观看第三页 | 久久极品 | 99久久日韩精品视频免费在线观看 | 国产福利不卡视频 | 天天狠狠操 | 日韩一级黄色av | 国产中文字幕免费 | 人人爽久久涩噜噜噜网站 | 国产精品久久久久影院日本 | av综合网址| 久久久久久久综合色一本 | 国产香蕉av | av韩国在线 | 在线观看一级视频 | 日韩精品视频在线免费观看 | 天天搞天天干 | 日韩欧美极品 | 日本中文字幕高清 | 久久大视频 | 国产盗摄精品一区二区 | 精品国产精品久久 | 激情综合五月网 | 天天操天天干天天插 | 在线视频观看成人 | 国产在线播放一区 | 天天插伊人 | 日韩一区在线免费观看 | 日韩精品专区在线影院重磅 | 五月婷婷中文网 | 欧美一级看片 | 精品国产综合区久久久久久 | 日批视频国产 | 少妇激情久久 | 久久在线精品视频 | 久久久久久不卡 | 国产精品video爽爽爽爽 | 蜜臀一区二区三区精品免费视频 | 欧美精品一区二区性色 | 国产婷婷精品av在线 | 精品一区二区亚洲 | 91av电影| 久久96国产精品久久99漫画 | 97视频免费在线 | www亚洲视频 | 久久久久久久久久久久电影 | 综合久久影院 | 韩国一区二区三区视频 | 99这里只有精品视频 | 日韩av男人的天堂 | 日本性生活一级片 | 日韩高清免费观看 | 精品国产99 | 久久精品伊人 | 黄色av大片| 在线免费观看国产黄色 | 国产精品毛片一区二区在线看 | 黄色大片日本 | 久久免费99精品久久久久久 | 最近免费中文字幕 | 久久精品久久99精品久久 | 久久综合久久综合久久综合 | 在线观看mv的中文字幕网站 | 精品一二三区 | 麻豆免费在线播放 | 91九色精品国产 | 国产高清精| 91九色蝌蚪视频在线 | 久久久99国产精品免费 | 一本一道久久a久久精品蜜桃 | 久久国产高清视频 | 亚洲精品动漫在线 | 成人免费大片黄在线播放 | 亚洲国产中文字幕在线观看 | 欧美一区二区在线看 | 国产成人免费高清 | 在线国产视频一区 | 在线 国产 亚洲 欧美 | 国产亚洲欧美在线视频 | 免费成人看片 | 成人av免费网站 | 亚洲天堂精品 | 天天射,天天干 | 四虎国产精品免费观看视频优播 | 国产精品久久久久毛片大屁完整版 | 成年人免费在线观看网站 | 国产一在线精品一区在线观看 | 成人av地址| 久久综合影院 | 婷婷六月久久 | 午夜性生活| 成人性生交大片免费看中文网站 | 男女精品久久 | 视频二区在线 | 又黄又爽又刺激的视频 | 黄色av成人在线观看 | 欧美激情视频一二三区 | 日韩精品视频在线观看网址 | 91亚洲在线 | 精精国产xxxx视频在线播放 | 激情av综合 | 精品一区二区三区电影 | 天天操天天舔天天干 | 欧美精品久久久久久久亚洲调教 | 亚洲在线成人精品 | 国产精品免费久久久久影院仙踪林 | 国产精品久久久久一区二区国产 | 日韩精品中文字幕在线 | 久久污视频 | 热re99久久精品国产66热 | 婷婷色在线播放 | 国产色在线观看 | 麻豆果冻剧传媒在线播放 | 免费亚洲一区二区 | 成年人app网址 | 欧美一级久久久久 | 国产69精品久久久久久 | 精品国产a | 亚洲涩涩网 | 免费日韩 精品中文字幕视频在线 | 国产精品精品视频 | av电影在线免费观看 | 日本中文字幕电影在线免费观看 | 久精品在线观看 | 国产精品免费不 | 日本xxxxav | 一区二区国产精品 | 国产黄色成人 | 91视频高清完整版 | 五月天六月丁香 | 成人av动漫在线观看 | 最近最新mv字幕免费观看 | 免费福利视频网站 | 精品亚洲国产视频 | 日本久久久久久久久久久 | 99久久精品免费看国产一区二区三区 | 精品国偷自产在线 | 久久久久久久久久久国产精品 | 草久久久久| 最新久久久 | 一区 二区 精品 | 免费看污污视频的网站 | 天天干天天干天天操 | 亚洲精品www | 欧美午夜视频在线 | 亚洲一级特黄 | 黄色a视频 | 久久国产精品99久久久久久进口 | 欧美少妇18p | 日本精品在线视频 | 91精品国自产在线观看欧美 | 精品国产伦一区二区三区观看体验 | 国产精品免费久久久久久 | wwwwwww色| 91成人精品在线 | 97成人啪啪网 | 精品视频中文字幕 | 在线观看免费av片 | 久久久免费国产 | 九七在线视频 | 香蕉视频在线观看免费 | 国产xx在线 | 国产黄色片一级 | 天天干天天天天 | 日韩电影黄色 | 亚洲欧美国产精品 | 99精品免费久久久久久久久 | 亚洲精品色婷婷 | 视频在线91 | 在线视频久久 | 国产手机av在线 | 一级黄色片在线免费观看 | 中文字幕在线不卡国产视频 | 欧美少妇xxx | 91少妇精拍在线播放 | 肉色欧美久久久久久久免费看 | 97超级碰碰碰视频在线观看 | 精品人人人人 | 国产一级久久 | 国产69久久久 | 国产亚洲精品综合一区91 | 波多野结衣视频一区 | 午夜狠狠干 | 视频成人免费 | 亚洲午夜精品久久久久久久久久久久 | 五月天精品视频 | 91最新网址 | www黄色com | 91亚洲精品国产 | 久一在线 | 日本精品中文字幕在线观看 | 成人在线电影观看 | 日韩欧美精品在线观看 | 亚洲一区久久 | 天天操夜夜干 | 精品日韩视频 | 岛国一区在线 | 成人动漫一区二区三区 | 国产精品69av | 色播99| 在线观看精品国产 | 国产成人1区 | 五月天亚洲综合小说网 | 国产最顶级的黄色片在线免费观看 | 99在线观看免费视频精品观看 | 免费观看视频的网站 | 国产精品一区二区在线播放 | 午夜精品久久久久久久久久久 | 久久视频在线观看中文字幕 | 国产91精品看黄网站 | 极品美女被弄高潮视频网站 | 国产精品久久久久久久久免费看 | 天天射天天干天天爽 | 中文字幕婷婷 | 亚洲欧美视频在线播放 | 91成人免费在线 | 国内精品久久久久影院优 | 午夜一级免费电影 | 黄色小网站在线 | 99视频一区| 8x成人在线 | 成人久久免费 | 狠狠色综合网站久久久久久久 | 亚洲午夜精品电影 | 丁香婷婷激情国产高清秒播 | a天堂在线看| 99人成在线观看视频 | 日韩av一区二区在线影视 | 精品毛片一区二区免费看 | 国产免费中文字幕 | 亚洲精品字幕 | 99婷婷狠狠成为人免费视频 | 精品国产一区二区三区久久久蜜臀 | 国产国产人免费人成免费视频 | 91片网 | 国产黄视频在线观看 | 在线中文字幕网站 | 中文字幕一区二区三区在线播放 | 天天射天天搞 | 美女福利视频 | 欧美a性| 啪啪凸凸 | 色在线最新 | 久久国产精品一区二区三区四区 | 国产剧情在线一区 | 男女男视频 | 蜜臀av夜夜澡人人爽人人桃色 | 黄色av一区二区三区 | 国产一级片一区二区三区 | 精品影院一区二区久久久 | 操操日日| 狠狠狠狠狠狠 | 亚洲春色综合另类校园电影 | 国产精品精品国产色婷婷 | 在线观看91| 日韩久久一区二区 | 91探花国产综合在线精品 | 视频二区在线 | 国产中文字幕在线播放 | 日韩精品久久久久久久电影99爱 | 国产精品一二 | 日韩精品不卡在线 | 天无日天天操天天干 | 色噜噜日韩精品一区二区三区视频 | 国产亚洲精品久久久久久移动网络 | 久久久久久久久久久久国产精品 | 91香蕉国产| 少妇精品久久久一区二区免费 | 波多野结衣视频在线 | 欧美无极色 | 人人狠狠| 免费看搞黄视频网站 | japanesefreesexvideo高潮 | 99精品福利| 亚洲精品视频久久 | 在线看片成人 | 免费在线国产精品 | 国产手机在线播放 | 亚洲无吗av | 色综合久久99 | 久久久久久激情 | 日本乱视频 | 在线观看岛国片 | 草免费视频 | 午夜精品视频一区 | 精品国产免费久久 | 99精品黄色 | 狠狠操导航 | 狠狠干狠狠艹 | 91精品国产乱码久久桃 | 国产精品国产三级在线专区 | 依人成人综合网 | 天天噜天天色 | 最新动作电影 | 精精国产xxxx视频在线播放 | va视频在线观看 | 国产精品乱码久久久久 | 精品亚洲免费视频 | 婷婷丁香激情五月 | 色的网站在线观看 | 在线视频日韩一区 | 国产日韩精品一区二区三区在线 | 亚洲女欲精品久久久久久久18 | 天天做天天射 | 国产亚洲片| 色网站在线观看 | 色中文字幕在线观看 | av色网站 | 在线免费观看视频一区 | 91成版人在线观看入口 | 国产精品成人aaaaa网站 | 91超国产 | 婷婷精品国产欧美精品亚洲人人爽 | 国产精品va在线观看入 | 色综合久久精品 | av7777777| 在线不卡a| 国产精品久久久777 成人手机在线视频 | 日韩高清不卡一区二区三区 | 亚洲国产精品va在线看黑人动漫 | 亚洲夜夜网 | 日韩免费看片 | 在线视频 一区二区 | 国产黄色免费观看 | 亚洲第一中文网 | 国产一区二区三区高清播放 | 亚洲精品婷婷 | 婷婷精品国产欧美精品亚洲人人爽 | 久久手机看片 | 国产精品成人久久 | 亚洲区另类春色综合小说校园片 | 久久久久久久久久久久国产精品 | 精品国产123 | 91私密视频 | 青青草久草在线 | 六月婷色| 婷婷精品国产一区二区三区日韩 | 天天操天天色天天 | 中文字幕4 | 成年人免费在线观看网站 | 免费色黄 | 国产精品一区二区62 | 国产在线精品视频 | 日韩免费在线播放 | 久久午夜免费观看 | 伊人婷婷| 日日夜夜噜 | 美女在线观看av | 中文字幕91 | 国产视频日韩 | 天天躁日日躁狠狠躁 | av一级一片| 亚洲视频1 | 日韩av在线高清 | 在线va视频| 99精品视频在线播放观看 | 麻豆国产精品一区二区三区 | www.com在线观看 | 黄色国产区 | 五月婷婷六月丁香激情 | 九草在线视频 | 免费看黄电影 | 日韩性色 | 成人免费在线观看电影 | www178ccom视频在线| 欧美色综合 | 亚洲精品一区二区久 | 国产日韩欧美在线 | 在线免费观看视频一区二区三区 | 黄色精品免费 | 欧美在线99 | 日韩在线视频看看 | 国产高清视频在线播放一区 | 狠狠操狠狠干2017 | 91av色| 免费在线激情电影 | 日韩精品一区二区三区免费观看视频 | 伊人久久电影网 | 97在线免费视频 | 亚洲1级片 | 日韩av资源在线观看 | 很污的网站 | 亚洲综合激情 | 亚洲精品久久久久www | 成年人免费av网站 | 国产成人精品av在线观 | 欧美一级小视频 | 在线观看免费成人av | 精品视频久久久 | 99re6热在线精品视频 | 久久人人97超碰国产公开结果 | 国产aa精品 | 天天综合在线观看 | 丝袜美腿在线视频 | 中文国产字幕在线观看 | 四虎国产精 | 欧美色久 | 永久av免费在线观看 | www日 | 国产精品一区免费看8c0m | 视频在线观看一区 | 成人av动漫在线 | 欧美激情第一区 | 国产麻豆电影在线观看 | 国产成人av片 | 日本三级在线观看中文字 | 久久久免费毛片 | 99久精品| 国产精品一区二区av日韩在线 | 岛国大片免费视频 | 91人人在线| av在线播放亚洲 | 成人天堂网 | 午夜精品久久久久久久爽 | wwwwww黄| 国产美女无遮挡永久免费 | 超碰在线天天 | 在线观看免费视频你懂的 | 欧美美女视频在线观看 | 美女黄频视频大全 | 六月天色婷婷 | 爱av在线网 | 成年人在线观看 | 91精品国产麻豆 | 国产精品久久久久久久久久久久午夜片 | 日韩理论 | 最近中文字幕完整高清 | 日韩精品一区二区三区中文字幕 | 久久综合九色综合欧美就去吻 | 亚洲激情影院 | 午夜性生活| 亚洲欧美日本一区二区三区 | 成人午夜影院在线观看 | 精品九九久久 | 午夜精品三区 | 色网站在线 | 中文字幕av免费观看 | 国产va精品免费观看 | 中文av在线播放 | 国产在线精品二区 | 久久久黄色免费网站 | 欧美久久久久久久 | 夜夜躁日日躁狠狠久久av | 久久婷婷网 | 手机av永久免费 | 中文字幕韩在线第一页 | 黄色资源网站 | 亚洲日本欧美在线 | 亚洲 综合 激情 | 亚洲国产精品影院 | 午夜在线资源 | 麻豆成人小视频 | 天天操天天干天天玩 | 亚洲天堂首页 | 天天综合导航 | 国产精品视频不卡 | 亚洲jizzjizz日本少妇 | 日韩中文字幕视频在线 | 成人a在线观看 | 日本久久片 | 日日噜噜噜噜夜夜爽亚洲精品 | 丁香五月网久久综合 | 中文字幕在线观看91 | 中文字幕中文字幕中文字幕 | 久久黄色精品视频 | 国产亚洲激情视频在线 | 亚洲精品国产精品国自产观看 | 亚洲午夜精品久久久久久久久 | 国产一区二区精 | 日韩欧美精品一区二区三区经典 | 日韩电影中文 | 国产黄色片网站 | 日韩av成人在线观看 | 婷婷在线视频观看 | 中文字幕中文 | 精品国产久 | 毛片的网址| 69av免费视频 | 欧美在线视频一区二区 | 欧美日韩视频观看 | 日韩久久精品一区二区三区下载 | 91探花视频 | 麻豆视频免费观看 | 成人毛片在线观看视频 | 天天插狠狠干 | 成人亚洲网 | 天天操网站 | 夜色.com | 欧美日韩观看 | 国产又粗又猛又黄又爽视频 | 精品国产综合区久久久久久 | 国内精品亚洲 | 日韩久久激情 | 精品久久影院 | 国产亚洲精品成人av久久影院 | 三上悠亚一区二区在线观看 | 99精品免费网 | www国产在线 | 91精品在线免费观看视频 | 激情网第四色 | 午夜国产在线观看 | 国产男女无遮挡猛进猛出在线观看 | 99理论片| 亚洲欧美日韩一二三区 | 久久免费视频5 | 在线观看av黄色 | 日韩在线播放欧美字幕 | 国产在线a视频 | 97香蕉视频 | 日韩在线视频免费播放 | 欧美日韩在线免费观看 | 亚洲美女免费精品视频在线观看 | 婷婷久月| 一级黄毛片 | 99精品免费在线观看 | 亚洲精品中文字幕视频 | 中文字幕123区 | 99亚洲精品在线 | 天天爱天天草 | 99精品国产在热久久 | 五月激情片 | 黄色三级免费观看 | 欧美少妇bbwhd | 国产精品一区电影 | 超碰在线天天 | 91精品蜜桃 | 国产精品乱码一区二三区 | 亚洲国产精品传媒在线观看 | 亚洲精品动漫久久久久 | 91麻豆文化传媒在线观看 | 欧美成人h版在线观看 | 亚洲国产日韩精品 | 国产精品麻豆三级一区视频 | 午夜精品久久久久久 | 国产一级片直播 | 91成人亚洲| av看片网址 | 国产精品久久久久久吹潮天美传媒 | 精品国产大片 | 日韩精品 在线视频 | 日韩最新av在线 | 美女黄网站视频免费 | 全黄网站| 午夜在线观看 | 精品a在线 | 色噜噜在线观看 | 国产精品永久免费在线 | 国产精品1区2区 | 五月天天在线 | 亚洲黄色大片 | 97色婷婷成人综合在线观看 | 二区三区中文字幕 | 国内精品久久久久久久影视麻豆 | 日韩免费电影一区二区 | 国产精品精品国产 | 特级毛片在线 | 97av视频| 日本中文字幕在线 | 免费成人黄色av | 欧美在线观看视频一区二区 | 日韩久久精品一区二区 | 91精品国产综合久久婷婷香蕉 | 久久久久久久久久伊人 | 六月婷色| 亚洲成人网av| 二区视频在线观看 | www操操操 | 人人澡人摸人人添学生av | 999久久a精品合区久久久 | 亚洲一级二级三级 | 人人舔人人射 | 欧美一级艳片视频免费观看 | 在线看国产一区 | av大全在线| 国产成人精品一区二区三区福利 | 欧美视屏一区二区 | 国产视频丨精品|在线观看 国产精品久久久久久久久久久久午夜 | 亚洲综合在线五月 | 日本成址在线观看 | 在线观看视频国产 | 91新人在线观看 | 黄色一级免费电影 | 韩国av三级 | 91精品91 | 99热这里只有精品在线观看 | 中文在线字幕免费观 | 99久久精品久久久久久动态片 | 国产一区欧美在线 | 一区二区三区在线播放 | 韩国av免费 | 99c视频高清免费观看 | 人人艹视频 | 麻豆超碰 | 久久99久久99免费视频 | 久久中文字幕视频 | 中文字幕免费播放 | 国产精品美女久久久久久网站 | 五月婷婷视频 | 色综合久久88色综合天天人守婷 | 久久不射电影院 | 黄色午夜 | 黄色小说免费在线观看 | 国产专区在线播放 | 久久精品96 | av色影院 | 日韩网站在线观看 | 9色在线视频 | 伊人影院得得 | 欧美精品一区二区蜜臀亚洲 | 97超碰资源网 | 久草观看视频 | 日韩精品亚洲专区在线观看 | japanese黑人亚洲人4k | 国产一区私人高清影院 | 九九九免费视频 | 欧美精品三级在线观看 | 人人玩人人添人人 | 欧美日韩有码 | 日韩精品免费一区二区在线观看 | 手机在线欧美 | 狠狠色香婷婷久久亚洲精品 | 亚洲国产人午在线一二区 | 一区二区三区在线免费播放 | 一二三区视频在线 | 尤物97国产精品久久精品国产 | 97人人爽|