亭亭五月天在线观看,亭亭五月天在线观看,国产最新av一区二区,国产 高清 中文字幕,99re热久久亚洲综合精品成人,熟妇 一区二区三区,一级做a爰片性色毛片武则天,美女的骚穴视频播放,国产美女午夜免费视频

首頁>國內(nèi) > 正文

深入淺出JavaScript異步編程

2022-10-31 16:47:27來源:前端充電寶

大家好,我是 CUGGZ。


(資料圖)

瀏覽器中的 JavaScript 是典型的事件驅(qū)動型程序,即它們會等待用戶觸發(fā)后才真正的執(zhí)行,而基于的JavaScript的服務(wù)器通常要等待客戶端通過網(wǎng)絡(luò)發(fā)送請求,然后才能執(zhí)行。這種異步編程在JavaScript是很常見的,下面就來介紹幾個異步編程的重要特性,它們可以使編寫異步代碼更容易。

本文將按照異步編程方式的出現(xiàn)時(shí)間來歸納整理:

一、什么是異步

下面先來看看同步和異步的概念:

同步:在執(zhí)行某段代碼時(shí),在沒有得到返回結(jié)果之前,其他代碼暫時(shí)是無法執(zhí)行的,但是一旦執(zhí)行完成拿到返回值,即可執(zhí)行其他代碼。也就是說,在此段代碼執(zhí)行完未返回結(jié)果之前,會阻塞之后的代碼執(zhí)行,這樣的情況稱為同步。

異步:當(dāng)某一代碼執(zhí)行異步過程調(diào)用發(fā)出后,這段代碼不會立刻得到返回結(jié)果。而是在異步調(diào)用發(fā)出之后,一般通過回調(diào)函數(shù)處理這個調(diào)用之后拿到結(jié)果。異步調(diào)用發(fā)出后,不會影響阻塞后面的代碼執(zhí)行,這樣的情況稱為異步。

下面來看一個例子:

// 同步function syncAdd(a, b) {  return a + b;}syncAdd(1, 2) // 立即得到結(jié)果:3// 異步function asyncAdd(a, b) {  setTimeout(function() {    console.log(a + b);  }, 1000)}asyncAdd(1, 2) // 1s后打印結(jié)果:3

這里定義了同步函數(shù) syncAdd 和異步函數(shù) asyncAdd,調(diào)用 syncAdd(1, 2) 函數(shù)時(shí)會等待得到結(jié)果之后再執(zhí)行后面的代碼。而調(diào)用 asyncAdd(1, 2) 時(shí)則會在得到結(jié)果之前繼續(xù)執(zhí)行,直到 1 秒后得到結(jié)果并打印。

我們知道,JavaScript 是單線程的,如果代碼同步執(zhí)行,就可能會造成阻塞;而如果使用異步則不會阻塞,不需要等待異步代碼執(zhí)行的返回結(jié)果,可以繼續(xù)執(zhí)行該異步任務(wù)之后的代碼邏輯。因此,在 JavaScript 編程中,會大量使用異步。

那為什么單線程的JavaScript還能實(shí)現(xiàn)異步呢,其實(shí)也沒有什么魔法,只是把一些操作交給了其他線程處理,然后采用了事件循環(huán)的機(jī)制來處理返回結(jié)果。

二、回調(diào)函數(shù)

在最基本的層面上,JavaScript的異步編程式通過回調(diào)實(shí)現(xiàn)的?;卣{(diào)的是函數(shù),可以傳給其他函數(shù),而其他函數(shù)會在滿足某個條件時(shí)調(diào)用這個函數(shù)。下面就來看看常見的不同形式的基于回調(diào)的異步編程。

1. 定時(shí)器

一種最簡單的異步操作就是在一定時(shí)間之后運(yùn)行某些代碼。如下面代碼:

setTimeout(asyncAdd(1, 2), 8000)

setTimeout()方法的第一個參數(shù)是一個函數(shù),第二個參數(shù)是以毫秒為單位的時(shí)間間隔。asyncAdd()方法可能是一個回調(diào)函數(shù),而setTimeout()方法就是注冊回調(diào)函數(shù)的函數(shù)。它還代指在什么異步條件下調(diào)用回調(diào)函數(shù)。setTimeout()方法只會調(diào)用一次回調(diào)函數(shù)。

2. 事件監(jiān)聽

給目標(biāo) DOM 綁定一個監(jiān)聽函數(shù),用的最多的是addEventListener:

document.getElementById("#myDiv").addEventListener("click", (e) => {  console.log("我被點(diǎn)擊了")}, false);

通過給 id 為myDiv的一個元素綁定了點(diǎn)擊事件的監(jiān)聽函數(shù),把任務(wù)的執(zhí)行時(shí)機(jī)推遲到了點(diǎn)擊這個動作發(fā)生時(shí)。此時(shí),任務(wù)的執(zhí)行順序與代碼的編寫順序無關(guān),只與點(diǎn)擊事件有沒有被觸發(fā)有關(guān)。

這里使用addEventListener注冊了回調(diào)函數(shù),這個方法的第一個參數(shù)是一個字符串,指定要注冊的事件類型,如果用戶點(diǎn)擊了指定的元素,瀏覽器就會調(diào)用回調(diào)函數(shù),并給他傳入一個對象,其中包含著事件的詳細(xì)信息。

3. 網(wǎng)絡(luò)請求

JavaScript中另外一種常見的異步操作就是網(wǎng)絡(luò)請求:

const SERVER_URL = "/server";let xhr = new XMLHttpRequest();// 創(chuàng)建 Http 請求xhr.open("GET", SERVER_URL, true);// 設(shè)置狀態(tài)監(jiān)聽函數(shù)xhr.onreadystatechange = function() {  if (this.readyState !== 4) return;  // 當(dāng)請求成功時(shí)  if (this.status === 200) {    handle(this.response);  } else {    console.error(this.statusText);  }};// 設(shè)置請求失敗時(shí)的監(jiān)聽函數(shù)xhr.onerror = function() {  console.error(this.statusText);};// 發(fā)送 Http 請求xhr.send(null);

這里使用XMLHttpRequest類及回調(diào)函數(shù)來發(fā)送HTTP請求并異步處理服務(wù)器返回的響應(yīng)。

4. Node中的回調(diào)與事件

Node.js服務(wù)端JavaScript環(huán)境底層就是異步的,定義了很多使用回調(diào)和事件的API。例如讀取文件默認(rèn)的API就是異步的,它會在讀取文件內(nèi)容之后調(diào)用一個回調(diào)函數(shù):

const fs = require("fs");let options = {}//  讀取配置文件,調(diào)用回調(diào)函數(shù)fs.readFile("config.json", "utf8", (err, data) => {    if(err) {      throw err;    }else{     Object.assign(options, JSON.parse(data))    }  startProgram(options)});

fs.readFile()方法以接收兩個參數(shù)的回調(diào)作為最后一個參數(shù)。它會異步讀取指定文件,如果讀取成功就會將第二個參數(shù)傳遞給回調(diào)的第二個參數(shù),如果發(fā)生錯誤,就會將錯誤傳遞給回調(diào)的第一個參數(shù)。

三、Promise1. Promise的概念

Promise是一種為簡化異步編程而設(shè)計(jì)的核心語言特性,它是一個對象,表示異步操作的結(jié)果。在最簡單的情況下,Promise就是一種處理回調(diào)的不同方式。不過,使用Promise也有實(shí)際的用處,基于回調(diào)的異步編程會有一個很現(xiàn)實(shí)的問題,那就是經(jīng)常出現(xiàn)回調(diào)多層嵌套的情況,會造成代碼難以理解。Promise可以讓這種嵌套回調(diào)以一種更線性的鏈?zhǔn)叫问奖磉_(dá)出來,因此更容易閱讀和理解。

回調(diào)的另一個問題就是難以處理錯誤,如果一個異步函數(shù)拋出異常,則該異常沒有辦法傳播到異步操作的發(fā)起者。異步編程的一個基本事實(shí)就是它破壞了異常處理。而Promise則標(biāo)準(zhǔn)化了異步錯誤處理,通過Promise鏈提供一種讓錯誤正確傳播的途經(jīng)。

實(shí)際上,Promise就是一個容器,里面保存著某個未來才會結(jié)束的事件(通常是異步操作)的結(jié)果。從語法上說,Promise 是一個對象,它可以獲取異步操作的消息。Promise 提供了統(tǒng)一的 API,各種異步操作都可以用同樣的方法進(jìn)行處理。

(1)Promise實(shí)例有三個狀態(tài):

pending 狀態(tài):表示進(jìn)行中。Promise 實(shí)例創(chuàng)建后的初始態(tài);fulfilled 狀態(tài):表示成功完成。在執(zhí)行器中調(diào)用 resolve 后達(dá)成的狀態(tài);rejected 狀態(tài):表示操作失敗。在執(zhí)行器中調(diào)用 reject 后達(dá)成的狀態(tài)。

(2)Promise實(shí)例有兩個過程:

pending -> fulfilled : Resolved(已完成);pending -> rejected:Rejected(已拒絕)。

Promise的特點(diǎn):

一旦狀態(tài)改變就不會再變,promise對象的狀態(tài)改變,只有兩種可能:從pending變?yōu)閒ulfilled,從pending變?yōu)閞ejected。當(dāng) Promise 實(shí)例被創(chuàng)建時(shí),內(nèi)部的代碼就會立即被執(zhí)行,而且無法從外部停止。比如無法取消超時(shí)或消耗性能的異步調(diào)用,容易導(dǎo)致資源的浪費(fèi);

如果不設(shè)置回調(diào)函數(shù),Promise內(nèi)部拋出的錯誤,不會反映到外部;

Promise 處理的問題都是“一次性”的,因?yàn)橐粋€ Promise 實(shí)例只能 resolve 或 reject 一次,所以面對某些需要持續(xù)響應(yīng)的場景時(shí)就會變得力不從心。比如上傳文件獲取進(jìn)度時(shí),默認(rèn)采用的就是事件監(jiān)聽的方式來實(shí)現(xiàn)。

下面來看一個例子:

const https = require("https");function httpPromise(url){  return new Promise((resolve,reject) => {    https.get(url, (res) => {      resolve(data);    }).on("error", (err) => {      reject(error);    });  })}httpPromise().then((data) => {  console.log(data)}).catch((error) => {  console.log(error)})

可以看到,Promise 會接收一個執(zhí)行器,在這個執(zhí)行器里,需要把目標(biāo)異步任務(wù)給放進(jìn)去。在 Promise 實(shí)例創(chuàng)建后,執(zhí)行器里的邏輯會立刻執(zhí)行,在執(zhí)行的過程中,根據(jù)異步返回的結(jié)果,決定如何使用 resolve 或 reject 來改變 Promise實(shí)例的狀態(tài)。

在這個例子里,當(dāng)用 resolve 切換到了成功態(tài)后,Promise 的邏輯就會走到 then 中傳入的方法里去;用 reject 切換到失敗態(tài)后,Promise 的邏輯就會走到 catch 傳入的方法中。

這樣的邏輯,本質(zhì)上與回調(diào)函數(shù)中的成功回調(diào)和失敗回調(diào)沒有差異。但這種寫法大大地提高了代碼的質(zhì)量。當(dāng)我們進(jìn)行大量的異步鏈?zhǔn)秸{(diào)用時(shí),回調(diào)地獄不復(fù)存在了。取而代之的是層級簡單、賞心悅目的 Promise 調(diào)用鏈:

httpPromise(url1)    .then(res {        console.log(res);        return httpPromise(url2);    })    .then(res {        console.log(res);        return httpPromise(url3);    })    .then(res {      console.log(res);      return httpPromise(url4);    })    .then(res console.log(res));

2. Promise的創(chuàng)建

Promise對象代表一個異步操作,有三種狀態(tài):pending(進(jìn)行中)、fulfilled(已成功)和rejected(已失?。?。

Promise構(gòu)造函數(shù)接受一個函數(shù)作為參數(shù),該函數(shù)的兩個參數(shù)分別是resolve和reject。

const promise = new Promise((resolve, reject) => {  if (/* 異步操作成功 */){    resolve(value);  } else {    reject(error);  }});

一般情況下,我們會用new Promise()來創(chuàng)建Promise對象。除此之外,還也可以使用promise.resolve和promise.reject這兩個方法來創(chuàng)建:

(1)Promise.resolve

Promise.resolve(value)的返回值是一個promise對象,我們可以對返回值進(jìn)行.then調(diào)用,如下代碼:

Promise.resolve(11).then(function(value){  console.log(value); // 打印出11});

resolve(11)會讓promise對象進(jìn)入確定(resolve狀態(tài)),并將參數(shù)11傳遞給后面then中指定的onFulfilled函數(shù);

(2)Promise.reject

Promise.reject的返回值也是一個promise對象,如下代碼:

Promise.reject(new Error("我錯了!"));

上面是以下代碼的簡單形式:

new Promise((resolve, reject) => {   reject(new Error("我錯了!"));});

下面來綜合看看resolve方法和reject方法:

function testPromise(ready) {  return new Promise(resolve,reject) => {    if(ready) {      resolve("hello world");    }else {      reject("No thanks");    }  });};testPromise(true).then((msg) => {  console.log(msg);},(error) => {  console.log(error);});

上面的代碼給testPromise方法傳遞一個參數(shù),返回一個promise對象,如果為true,那么調(diào)用Promise對象中的resolve()方法,并且把其中的參數(shù)傳遞給后面的then第一個函數(shù)內(nèi),因此打印出 “hello world”, 如果為false,會調(diào)用promise對象中的reject()方法,則會進(jìn)入then的第二個函數(shù)內(nèi),會打印No thanks。

3. Promise的作用

在開發(fā)中可能會碰到這樣的需求:使用ajax發(fā)送A請求,成功后拿到數(shù)據(jù),需要把數(shù)據(jù)傳給B請求,那么需要這樣編寫代碼:

let fs = require("fs")fs.readFile("./a.txt","utf8",function(err,data){  fs.readFile(data,"utf8",function(err,data){    fs.readFile(data,"utf8",function(err,data){      console.log(data)    })  })})

這段代碼之所以看上去很亂,歸結(jié)其原因有兩點(diǎn):

第一是嵌套調(diào)用,下面的任務(wù)依賴上個任務(wù)的請求結(jié)果,并在上個任務(wù)的回調(diào)函數(shù)內(nèi)部執(zhí)行新的業(yè)務(wù)邏輯,這樣當(dāng)嵌套層次多了之后,代碼的可讀性就變得非常差了。

第二是任務(wù)的不確定性,執(zhí)行每個任務(wù)都有兩種可能的結(jié)果(成功或者失敗),所以體現(xiàn)在代碼中就需要對每個任務(wù)的執(zhí)行結(jié)果做兩次判斷,這種對每個任務(wù)都要進(jìn)行一次額外的錯誤處理的方式,明顯增加了代碼的混亂程度。

既然原因分析出來了,那么問題的解決思路就很清晰了:

消滅嵌套調(diào)用;

合并多個任務(wù)的錯誤處理。

這么說可能有點(diǎn)抽象,不過 Promise 解決了這兩個問題。接下來就看看 Promise 是怎么消滅嵌套調(diào)用和合并多個任務(wù)的錯誤處理的。

Promise出現(xiàn)之后,代碼可以這樣寫:

let fs = require("fs")function read(url){  return new Promise((resolve,reject)=>{    fs.readFile(url,"utf8",function(error,data){      error && reject(error)      resolve(data)    })  })}read("./a.txt").then(data=>{  return read(data) }).then(data=>{  return read(data)  }).then(data=>{  console.log(data)})

通過引入 Promise,上面這段代碼看起來就非常線性了,也非常符合人的直覺。Promise 利用了三大技術(shù)手段來解決回調(diào)地獄:回調(diào)函數(shù)延遲綁定、返回值穿透、錯誤冒泡。

下面來看一段代碼:

let readFilePromise = (filename) => {  fs.readFile(filename, (err, data) => {    if(err) {      reject(err);    }else {      resolve(data);    }  })}readFilePromise("1.json").then(data {  return readFilePromise("2.json")});

可以看到,回調(diào)函數(shù)不是直接聲明的,而是通過后面的 then 方法傳入的,即延遲傳入,這就是回調(diào)函數(shù)延遲綁定。接下來針對上面的代碼做一下調(diào)整,如下:

let x = readFilePromise("1.json").then(data {  return readFilePromise("2.json")  //這是返回的Promise});x.then()

根據(jù) then 中回調(diào)函數(shù)的傳入值創(chuàng)建不同類型的 Promise,然后把返回的 Promise 穿透到外層,以供后續(xù)的調(diào)用。這里的 x 指的就是內(nèi)部返回的 Promise,然后在 x 后面可以依次完成鏈?zhǔn)秸{(diào)用。這便是返回值穿透的效果,這兩種技術(shù)一起作用便可以將深層的嵌套回調(diào)寫成下面的形式。

readFilePromise("1.json").then(data {    return readFilePromise("2.json");}).then(data {    return readFilePromise("3.json");}).then(data {    return readFilePromise("4.json");});

這樣就顯得清爽許多,更重要的是,它更符合人的線性思維模式,開發(fā)體驗(yàn)更好,兩種技術(shù)結(jié)合產(chǎn)生了鏈?zhǔn)秸{(diào)用的效果。

這樣解決了多層嵌套的問題,那另外一個問題,即每次任務(wù)執(zhí)行結(jié)束后分別處理成功和失敗的情況怎么解決的呢?Promise 采用了錯誤冒泡的方式。下面來看效果:

readFilePromise("1.json").then(data {    return readFilePromise("2.json");}).then(data {    return readFilePromise("3.json");}).then(data {    return readFilePromise("4.json");}).catch(err {  // xxx})

這樣前面產(chǎn)生的錯誤會一直向后傳遞,被 catch 接收到,就不用頻繁地檢查錯誤了。從上面的這些代碼中可以看到,Promise 解決效果也比較明顯:實(shí)現(xiàn)鏈?zhǔn)秸{(diào)用,解決多層嵌套問題;實(shí)現(xiàn)錯誤冒泡后一站式處理,解決每次任務(wù)中判斷錯誤、增加代碼混亂度的問題。

4. Promise的方法

Promise常用的方法:then()、catch()、all()、race()、finally()、allSettled()、any()。

(1)then()

當(dāng)Promise執(zhí)行的內(nèi)容符合成功條件時(shí),調(diào)用resolve函數(shù),失敗就調(diào)用reject函數(shù)。那Promise創(chuàng)建完了,該如何調(diào)用呢?這時(shí)就該then出場了:

promise.then(function(value) {  // success}, function(error) {  // failure});

then方法接受兩個回調(diào)函數(shù)作為參數(shù)。第一個回調(diào)函數(shù)是Promise對象的狀態(tài)變?yōu)閞esolved時(shí)調(diào)用,第二個回調(diào)函數(shù)是Promise對象的狀態(tài)變?yōu)閞ejected時(shí)調(diào)用。其中第二個參數(shù)可以省略。

then方法返回的是一個新的Promise實(shí)例。因此可以采用鏈?zhǔn)綄懛?,即then方法后面再調(diào)用另一個then方法。當(dāng)寫有順序的異步事件時(shí),需要串行時(shí),可以這樣寫:

let promise = new Promise((resolve,reject)=>{    ajax("first").success(function(res){        resolve(res);    })})promise.then(res=>{    return new Promise((resovle,reject)=>{        ajax("second").success(function(res){            resolve(res)        })    })}).then(res=>{    return new Promise((resovle,reject)=>{        ajax("second").success(function(res){            resolve(res)        })    })}).then(res=>{    })

(2)catch()

Promise對象的catch方法相當(dāng)于then方法的第二個參數(shù),指向reject的回調(diào)函數(shù)。

不過catch方法還有一個作用,就是在執(zhí)行resolve回調(diào)函數(shù)時(shí),如果出現(xiàn)錯誤,拋出異常,不會停止運(yùn)行,而是進(jìn)入catch方法中:

p.then((data) => {     console.log("resolved",data);},(err) => {     console.log("rejected",err);});

(3)all()

all方法可以完成并行任務(wù), 它接收一個數(shù)組,數(shù)組的每一項(xiàng)都是一個promise對象。當(dāng)數(shù)組中所有的promise的狀態(tài)都達(dá)到resolved時(shí),all方法的狀態(tài)就會變成resolved,如果有一個狀態(tài)變成了rejected,那么all方法的狀態(tài)就會變成rejected:

let promise1 = new Promise((resolve,reject)=>{ setTimeout(()=>{       resolve(1); },2000)});let promise2 = new Promise((resolve,reject)=>{ setTimeout(()=>{       resolve(2); },1000)});let promise3 = new Promise((resolve,reject)=>{ setTimeout(()=>{       resolve(3); },3000)});Promise.all([promise1,promise2,promise3]).then(res=>{    console.log(res);  //結(jié)果為:[1,2,3] })

調(diào)用all方法時(shí)的結(jié)果成功的時(shí)候是回調(diào)函數(shù)的參數(shù)也是一個數(shù)組,這個數(shù)組按順序保存著每一個promise對象resolve執(zhí)行時(shí)的值。

(4)race()

race方法和all一樣,接受的參數(shù)是一個每項(xiàng)都是promise的數(shù)組,但與all不同的是,當(dāng)最先執(zhí)行完的事件執(zhí)行完之后,就直接返回該promise對象的值。

如果第一個promise對象狀態(tài)變成resolved,那自身的狀態(tài)變成了resolved;反之,第一個promise變成rejected,那自身狀態(tài)就會變成rejected。

let promise1 = new Promise((resolve,reject) => { setTimeout(()  {       reject(1); },2000)});let promise2 = new Promise((resolve,reject) => { setTimeout(() {       resolve(2); },1000)});let promise3 = new Promise((resolve,reject) => { setTimeout(() {       resolve(3); },3000)});Promise.race([promise1,promise2,promise3]).then(res { console.log(res); //結(jié)果:2},rej => {    console.log(rej)};)

那么race方法有什么實(shí)際作用呢?當(dāng)需要執(zhí)行一個任務(wù),超過多長時(shí)間就不做了,就可以用這個方法來解決:

Promise.race([promise1, timeOutPromise(5000)]).then(res console.log(res))

(5)finally()

finally方法用于指定不管 Promise 對象最后狀態(tài)如何,都會執(zhí)行的操作。該方法是 ES2018 引入標(biāo)準(zhǔn)的。

promise.then(result {···})    .catch(error {···})       .finally(() {···});

上面代碼中,不管promise最后的狀態(tài)如何,在執(zhí)行完then或catch指定的回調(diào)函數(shù)以后,都會執(zhí)行finally方法指定的回調(diào)函數(shù)。

下面來看例子,服務(wù)器使用 Promise 處理請求,然后使用finally方法關(guān)掉服務(wù)器。

server.listen(port)  .then(function () {    // ...  })  .finally(server.stop);

finally方法的回調(diào)函數(shù)不接受任何參數(shù),這意味著沒有辦法知道,前面的 Promise 狀態(tài)到底是fulfilled還是rejected。這表明,finally方法里面的操作,應(yīng)該是與狀態(tài)無關(guān)的,不依賴于 Promise 的執(zhí)行結(jié)果。

finally本質(zhì)上是then方法的特例:

promise.finally(() {  // 語句});// 等同于promise.then(  result {    // 語句    return result;  },  error => {    // 語句    throw error;  });

上面代碼中,如果不使用finally方法,同樣的語句需要為成功和失敗兩種情況各寫一次。有了finally方法,則只需要寫一次。

(6)allSettled()

Promise.allSettled 的語法及參數(shù)跟 Promise.all 類似,其參數(shù)接受一個 Promise 的數(shù)組,返回一個新的 Promise。唯一的不同在于,執(zhí)行完之后不會失敗,也就是說當(dāng) Promise.allSettled 全部處理完成后,我們可以拿到每個 Promise 的狀態(tài),而不管其是否處理成功。

下面使用 allSettled 實(shí)現(xiàn)的一段代碼:

const resolved = Promise.resolve(2);const rejected = Promise.reject(-1);const allSettledPromise = Promise.allSettled([resolved, rejected]);allSettledPromise.then(function (results) {  console.log(results);});// 返回結(jié)果:// [//    { status: "fulfilled", value: 2 },//    { status: "rejected", reason: -1 }// ]

可以看到,Promise.allSettled 最后返回的是一個數(shù)組,記錄傳進(jìn)來的參數(shù)中每個 Promise 的返回值,這就是和 all 方法不太一樣的地方。你也可以根據(jù) all 方法提供的業(yè)務(wù)場景的代碼進(jìn)行改造,其實(shí)也能知道多個請求發(fā)出去之后,Promise 最后返回的是每個參數(shù)的最終狀態(tài)。

(7)any()

any 方法返回一個 Promise,只要參數(shù) Promise 實(shí)例有一個變成 fullfilled 狀態(tài),最后 any 返回的實(shí)例就會變成 fullfilled 狀態(tài);如果所有參數(shù) Promise 實(shí)例都變成 rejected 狀態(tài),包裝實(shí)例就會變成 rejected 狀態(tài)。

下面對上面 allSettled 這段代碼進(jìn)行改造,來看下改造完的代碼和執(zhí)行結(jié)果:

const resolved = Promise.resolve(2);const rejected = Promise.reject(-1);const allSettledPromise = Promise.any([resolved, rejected]);allSettledPromise.then(function (results) {  console.log(results);});// 返回結(jié)果:2

可以看出,只要其中一個 Promise 變成 fullfilled 狀態(tài),那么 any 最后就返回這個 Promise。由于上面 resolved 這個 Promise 已經(jīng)是 resolve 的了,故最后返回結(jié)果為 2。

5. Promise的異常處理

錯誤處理是所有編程范型都必須要考慮的問題,在使用 JavaScript 進(jìn)行異步編程時(shí),也不例外。如果我們不做特殊處理,會怎樣呢?來看下面的代碼,先定義一個必定會失敗的方法

let fail = () {    setTimeout(() { throw new Error("fail");    }, 1000);};

調(diào)用:

console.log(1);try {    fail();} catch (e) {    console.log("captured");}console.log(2);

可以看到打印出了 1 和 2,并在 1 秒后,獲得一個“Uncaught Error”的錯誤打印,注意觀察這個錯誤的堆棧:

Uncaught Error: fail    at :3:9

可以看到,其中的 setTimeout (async) 這樣的字樣,表示著這是一個異步調(diào)用拋出的堆棧。但是,captured”這樣的字樣也并未打印,因?yàn)槟阜椒?fail() 本身的原始順序執(zhí)行并沒有失敗,這個異常的拋出是在回調(diào)行為里發(fā)生的。 從上面的例子可以看出,對于異步編程來說,我們需要使用一種更好的機(jī)制來捕獲并處理可能發(fā)生的異常。

Promise 除了支持 resolve 回調(diào)以外,還支持 reject 回調(diào),前者用于表示異步調(diào)用順利結(jié)束,而后者則表示有異常發(fā)生,中斷調(diào)用鏈并將異常拋出:

const exe = (flag) => () new Promise((resolve, reject) => {    console.log(flag);    setTimeout(() {        flag ? resolve("yes") : reject("no");    }, 1000);});

上面的代碼中,flag 參數(shù)用來控制流程是順利執(zhí)行還是發(fā)生錯誤。在錯誤發(fā)生的時(shí)候,no 字符串會被傳遞給 reject 函數(shù),進(jìn)一步傳遞給調(diào)用鏈:

Promise.resolve()       .then(exe(false))       .then(exe(true));

上面的調(diào)用鏈,在執(zhí)行的時(shí)候,第二行就傳入了參數(shù) false,它就已經(jīng)失敗了,異常拋出了,因此第三行的 exe 實(shí)際沒有得到執(zhí)行,執(zhí)行結(jié)果如下:

falseUncaught (in promise) no

這就說明,通過這種方式,調(diào)用鏈被中斷了,下一個正常邏輯 exe(true) 沒有被執(zhí)行。 但是,有時(shí)候需要捕獲錯誤,而繼續(xù)執(zhí)行后面的邏輯,該怎樣做?這種情況下就要在調(diào)用鏈中使用 catch 了:

Promise.resolve()       .then(exe(false))       .catch((info) => { console.log(info); })       .then(exe(true));

這種方式下,異常信息被捕獲并打印,而調(diào)用鏈的下一步,也就是第四行的 exe(true) 可以繼續(xù)被執(zhí)行。將看到這樣的輸出:

falsenotrue

6. Promise的實(shí)現(xiàn)

這一部分就來簡單實(shí)現(xiàn)一下Promise及其常用的方法。

(1)Promise

const PENDING = "pending";const RESOLVED = "resolved";const REJECTED = "rejected";function MyPromise(fn) {  // 保存初始化狀態(tài)  var self = this;  // 初始化狀態(tài)  this.state = PENDING;  // 用于保存 resolve 或者 rejected 傳入的值  this.value = null;  // 用于保存 resolve 的回調(diào)函數(shù)  this.resolvedCallbacks = [];  // 用于保存 reject 的回調(diào)函數(shù)  this.rejectedCallbacks = [];  // 狀態(tài)轉(zhuǎn)變?yōu)?resolved 方法  function resolve(value) {    // 判斷傳入元素是否為 Promise 值,如果是,則狀態(tài)改變必須等待前一個狀態(tài)改變后再進(jìn)行改變    if (value instanceof MyPromise) {      return value.then(resolve, reject);    }    // 保證代碼的執(zhí)行順序?yàn)楸据喪录h(huán)的末尾    setTimeout(() {      // 只有狀態(tài)為 pending 時(shí)才能轉(zhuǎn)變,      if (self.state === PENDING) {        // 修改狀態(tài)        self.state = RESOLVED;        // 設(shè)置傳入的值        self.value = value;        // 執(zhí)行回調(diào)函數(shù)        self.resolvedCallbacks.forEach(callback {          callback(value);        });      }    }, 0);  }  // 狀態(tài)轉(zhuǎn)變?yōu)?rejected 方法  function reject(value) {    // 保證代碼的執(zhí)行順序?yàn)楸据喪录h(huán)的末尾    setTimeout(() {      // 只有狀態(tài)為 pending 時(shí)才能轉(zhuǎn)變      if (self.state === PENDING) {        // 修改狀態(tài)        self.state = REJECTED;        // 設(shè)置傳入的值        self.value = value;        // 執(zhí)行回調(diào)函數(shù)        self.rejectedCallbacks.forEach(callback {          callback(value);        });      }    }, 0);  }  // 將兩個方法傳入函數(shù)執(zhí)行  try {    fn(resolve, reject);  } catch (e) {    // 遇到錯誤時(shí),捕獲錯誤,執(zhí)行 reject 函數(shù)    reject(e);  }}MyPromise.prototype.then = function(onResolved, onRejected) {  // 首先判斷兩個參數(shù)是否為函數(shù)類型,因?yàn)檫@兩個參數(shù)是可選參數(shù)  onResolved =    typeof onResolved === "function"      ? onResolved      : function(value) {          return value;        };  onRejected =    typeof onRejected === "function"      ? onRejected      : function(error) {          throw error;        };  // 如果是等待狀態(tài),則將函數(shù)加入對應(yīng)列表中  if (this.state === PENDING) {    this.resolvedCallbacks.push(onResolved);    this.rejectedCallbacks.push(onRejected);  }  // 如果狀態(tài)已經(jīng)凝固,則直接執(zhí)行對應(yīng)狀態(tài)的函數(shù)  if (this.state === RESOLVED) {    onResolved(this.value);  }  if (this.state === REJECTED) {    onRejected(this.value);  }};

(2)Promise.then

then方法返回一個新的promise實(shí)例,為了在promise狀態(tài)發(fā)生變化時(shí)(resolve/reject被調(diào)用時(shí))再執(zhí)行then里的函數(shù),我們使用一個callbacks數(shù)組先把傳給then的函數(shù)暫存起來,等狀態(tài)改變時(shí)再調(diào)用。

那么,怎么保證后一個then里的方法在前一個then(可能是異步)結(jié)束之后再執(zhí)行呢?

可以將傳給then的函數(shù)和新promise的resolve一起push到前一個promise的callbacks數(shù)組中,達(dá)到承前啟后的效果:

承前:當(dāng)前一個promise完成后,調(diào)用其resolve變更狀態(tài),在這個resolve里會依次調(diào)用callbacks里的回調(diào),這樣就執(zhí)行了then里的方法了

啟后:上一步中,當(dāng)then里的方法執(zhí)行完成后,返回一個結(jié)果,如果這個結(jié)果是個簡單的值,就直接調(diào)用新promise的resolve,讓其狀態(tài)變更,這又會依次調(diào)用新promise的callbacks數(shù)組里的方法,循環(huán)往復(fù)。。如果返回的結(jié)果是個promise,則需要等它完成之后再觸發(fā)新promise的resolve,所以可以在其結(jié)果的then里調(diào)用新promise的resolve

then(onFulfilled, onReject){    // 保存前一個promise的this    const self = this;     return new MyPromise((resolve, reject) => {      // 封裝前一個promise成功時(shí)執(zhí)行的函數(shù)      let fulfilled = () {        try{          const result = onFulfilled(self.value); // 承前          return result instanceof MyPromise? result.then(resolve, reject) : resolve(result); //啟后        }catch(err){          reject(err)        }      }      // 封裝前一個promise失敗時(shí)執(zhí)行的函數(shù)      let rejected = () {        try{          const result = onReject(self.reason);          return result instanceof MyPromise? result.then(resolve, reject) : reject(result);        }catch(err){          reject(err)        }      }      switch(self.status){        case PENDING:           self.onFulfilledCallbacks.push(fulfilled);          self.onRejectedCallbacks.push(rejected);          break;        case FULFILLED:          fulfilled();          break;        case REJECT:          rejected();          break;      }    })   }

注意:

連續(xù)多個then里的回調(diào)方法是同步注冊的,但注冊到了不同的callbacks數(shù)組中,因?yàn)槊看蝨hen都返回新的promise實(shí)例(參考上面的例子和圖)

注冊完成后開始執(zhí)行構(gòu)造函數(shù)中的異步事件,異步完成之后依次調(diào)用callbacks數(shù)組中提前注冊的回調(diào)

(3)Promise.all

該方法的參數(shù)是 Promise 的實(shí)例數(shù)組, 然后注冊一個 then 方法。 待數(shù)組中的 Promise 實(shí)例的狀態(tài)都轉(zhuǎn)為 fulfilled 之后則執(zhí)行 then 方法.,這里主要就是一個計(jì)數(shù)邏輯, 每當(dāng)一個 Promise 的狀態(tài)變?yōu)?fulfilled 之后就保存該實(shí)例返回的數(shù)據(jù), 然后將計(jì)數(shù)減一, 當(dāng)計(jì)數(shù)器變?yōu)?時(shí), 代表數(shù)組中所有 Promise 實(shí)例都執(zhí)行完畢.

Promise.all = function (arr) {  let args = Array.prototype.slice.call(arr)  return new Promise(function (resolve, reject) {    if (args.length === 0) return resolve([])    let remaining = args.length    function res(i, val) {      try {        if (val && (typeof val === "object" || typeof val === "function")) {          let then = val.then          if (typeof then === "function") {            then.call(val, function (val) { // 這里如果傳入?yún)?shù)是 promise的話需要將結(jié)果傳入 args, 而不是 promise實(shí)例              res(i, val)             }, reject)            return          }        }        args[i] = val        if (--remaining === 0) {          resolve(args)        }      } catch (ex) {        reject(ex)      }    }    for (let i = 0; i < args.length; i++) {      res(i, args[i])    }  })}

(4)Promise.race

該方法的參數(shù)是 Promise 實(shí)例數(shù)組, 然后其 then 注冊的回調(diào)方法是數(shù)組中的某一個 Promise 的狀態(tài)變?yōu)?fulfilled 的時(shí)候就執(zhí)行. 因?yàn)?Promise 的狀態(tài)只能改變一次, 那么我們只需要把 Promise.race 中產(chǎn)生的 Promise 對象的 resolve 方法, 注入到數(shù)組中的每一個 Promise 實(shí)例中的回調(diào)函數(shù)中即可:

oPromise.race = function (args) {  return new oPromise((resolve, reject) => {    for (let i = 0, len = args.length; i < len; i++) {      args[i].then(resolve, reject)    }  })}

四、Generator1. Generator 概述

(1)Generator

Generator(生成器)是 ES6 中的關(guān)鍵詞,通俗來講 Generator 是一個帶星號的函數(shù)(它并不是真正的函數(shù)),可以配合 yield 關(guān)鍵字來暫?;蛘邎?zhí)行函數(shù)。先來看一個例子:

function* gen() {  console.log("enter");  let a = yield 1;  let b = yield (function () {return 2})();  return 3;}var g = gen()           // 阻塞,不會執(zhí)行任何語句console.log(typeof g)   // 返回 object 這里不是 "function"console.log(g.next())console.log(g.next())console.log(g.next())console.log(g.next())

輸出結(jié)果如下:

objectenter{ value: 1, done: false }{ value: 2, done: false }{ value: 3, done: true }{ value: undefined, done: true }

Generator 中配合使用 yield 關(guān)鍵詞可以控制函數(shù)執(zhí)行的順序,每當(dāng)執(zhí)行一次 next 方法,Generator 函數(shù)會執(zhí)行到下一個存在 yield 關(guān)鍵詞的位置。

總結(jié),Generator 的執(zhí)行的關(guān)鍵點(diǎn)如下:

調(diào)用 gen() 后,程序會阻塞,不會執(zhí)行任何語句;

調(diào)用 g.next() 后,程序繼續(xù)執(zhí)行,直到遇到 yield 關(guān)鍵詞時(shí)執(zhí)行暫停;

一直執(zhí)行 next 方法,最后返回一個對象,其存在兩個屬性:value和done。

(2)yield

yield 同樣也是 ES6 的關(guān)鍵詞,配合 Generator 執(zhí)行以及暫停。yield 關(guān)鍵詞最后返回一個迭代器對象,該對象有 value 和 done 兩個屬性,其中 done 屬性代表返回值以及是否完成。yield 配合著 Generator,再同時(shí)使用 next 方法,可以主動控制 Generator 執(zhí)行進(jìn)度。

下面來看看多個 Generator 配合 yield 使用的情況:

function* gen1() {    yield 1;    yield* gen2();    yield 4;}function* gen2() {    yield 2;    yield 3;}var g = gen1();console.log(g.next())console.log(g.next())console.log(g.next())console.log(g.next())

執(zhí)行結(jié)果如下:

{ value: 1, done: false }{ value: 2, done: false }{ value: 3, done: false }{ value: 4, done: false }{value: undefined, done: true}

可以看到,使用 yield 關(guān)鍵詞的話還可以配合著 Generator 函數(shù)嵌套使用,從而控制函數(shù)執(zhí)行進(jìn)度。這樣對于 Generator 的使用,以及最終函數(shù)的執(zhí)行進(jìn)度都可以很好地控制,從而形成符合你設(shè)想的執(zhí)行順序。即便 Generator 函數(shù)相互嵌套,也能通過調(diào)用 next 方法來按照進(jìn)度一步步執(zhí)行。

3. Generator 和 Promise 結(jié)合

其實(shí) Promise 也可以和 Generator 配合來實(shí)現(xiàn)上面的效果。還是利用上面的輸出文件的例子,對代碼進(jìn)行改造,如下所示:

const readFilePromise = (filename) => {  return new Promise((resolve, reject) => {    fs.readFile(filename, (err, data) => {      if(err) {        reject(err);      }else {        resolve(data);      }    })  }).then(res res);}// 這塊和上面 thunk 的方式一樣const gen = function* () {  const data1 = yield readFilePromise("1.txt")  console.log(data1.toString())  const data2 = yield readFilePromise("2.txt")  console.log(data2.toString)}// 這里和上面 thunk 的方式一樣function run(gen){  const next = (err, data) => {    let res = gen.next(data);    if(res.done) return;    res.value(next);  }  next();}run(g);

可以看到,thunk 函數(shù)的方式和通過 Promise 方式執(zhí)行效果本質(zhì)上是一樣的,只不過通過 Promise 的方式也可以配合 Generator 函數(shù)實(shí)現(xiàn)同樣的異步操作。

4. co 函數(shù)庫

co 函數(shù)庫用于處理 Generator 函數(shù)的自動執(zhí)行。核心原理其實(shí)就是通過和 thunk 函數(shù)以及 Promise 對象進(jìn)行配合,包裝成一個庫。它使用起來非常簡單,比如還是用上面那段代碼,第三段代碼就可以省略了,直接引用 co 函數(shù),包裝起來就可以使用了,代碼如下:

const co = require("co");let g = gen();co(g).then(res{  console.log(res);})

這段代碼比較簡單,幾行就完成了之前寫的遞歸的那些操作。那么為什么 co 函數(shù)庫可以自動執(zhí)行 Generator 函數(shù),它的處理原理如下:

因?yàn)?Generator 函數(shù)就是一個異步操作的容器,它需要一種自動執(zhí)行機(jī)制,co 函數(shù)接受 Generator 函數(shù)作為參數(shù),并最后返回一個 Promise 對象。

在返回的 Promise 對象里面,co 先檢查參數(shù) gen 是否為 Generator 函數(shù)。如果是,就執(zhí)行該函數(shù);如果不是就返回,并將 Promise 對象的狀態(tài)改為 resolved。

co 將 Generator 函數(shù)的內(nèi)部指針對象的 next 方法,包裝成 onFulfilled 函數(shù)。這主要是為了能夠捕捉拋出的錯誤。

關(guān)鍵的是 next 函數(shù),它會反復(fù)調(diào)用自身。

五、Async/Await1. async/await 的概念

ES7 新增了兩個關(guān)鍵字: async和await,代表異步JavaScript編程范式的遷移。它改進(jìn)了生成器的缺點(diǎn),提供了在不阻塞主線程的情況下使用同步代碼實(shí)現(xiàn)異步訪問資源的能力。其實(shí) async/await 是 Generator 的語法糖,它能實(shí)現(xiàn)的效果都能用then鏈來實(shí)現(xiàn),它是為優(yōu)化then鏈而開發(fā)出來的。

從字面上來看,async是“異步”的簡寫,await則為等待,所以 async 用來聲明異步函數(shù),這個關(guān)鍵字可以用在函數(shù)聲明、函數(shù)表達(dá)式、箭頭函數(shù)和方法上。因?yàn)楫惒胶瘮?shù)主要針對不會馬上完成的任務(wù),所以自然需要一種暫停和恢復(fù)執(zhí)行的能力,使用await關(guān)鍵字可以暫停異步代碼的執(zhí)行,等待Promise解決。async 關(guān)鍵字可以讓函數(shù)具有異步特征,但總體上代碼仍然是同步求值的。

它們的用法很簡單,首先用 async 關(guān)鍵字聲明一個異步函數(shù):

async function httpRequest() {}

然后就可以在這個函數(shù)內(nèi)部使用 await 關(guān)鍵字了:

async function httpRequest() {  let res1 = await httpPromise(url1)  console.log(res1)}

這里,await關(guān)鍵字會接收一個期約并將其轉(zhuǎn)化為一個返回值或一個拋出的異常。通過情況下,我們不會使用await來接收一個保存期約的變量,更多的是把他放在一個會返回期約的函數(shù)調(diào)用面前,比如上述例子。這里的關(guān)鍵就是,await關(guān)鍵字并不會導(dǎo)致程序阻塞,代碼仍然是異步的,而await只是掩蓋了這個事實(shí),這就意味著任何使用await的代碼本身都是異步的。

下面來看看async函數(shù)返回了什么:

async function testAsy(){   return "hello world";}let result = testAsy(); console.log(result)

可以看到,async 函數(shù)返回的是 Promise 對象。如果異步函數(shù)使用return關(guān)鍵字返回了值(如果沒有return則會返回undefined),這個值則會被Promise.resolve()包裝成 Promise 對象。異步函數(shù)始終返回Promise對象。

2. await 到底在等啥?

那await到底在等待什么呢?

一般我們認(rèn)為 await 是在等待一個 async 函數(shù)完成。不過按語法說明,await 等待的是一個表達(dá)式,這個表達(dá)式的結(jié)果是 Promise 對象或其它值。

因?yàn)?async 函數(shù)返回一個 Promise 對象,所以 await 可以用于等待一個 async 函數(shù)的返回值——這也可以說是 await 在等 async 函數(shù)。但要清楚,它等的實(shí)際是一個返回值。注意,await 不僅用于等 Promise 對象,它可以等任意表達(dá)式的結(jié)果。所以,await 后面實(shí)際是可以接普通函數(shù)調(diào)用或者直接量的。所以下面這個示例完全可以正確運(yùn)行:

function getSomething() {    return "something";}async function testAsync() {    return Promise.resolve("hello async");}async function test() {    const v1 = await getSomething();    const v2 = await testAsync();    console.log(v1, v2);}test(); // something hello async

await 表達(dá)式的運(yùn)算結(jié)果取決于它等的是什么:

如果它等到的不是一個 Promise 對象,那 await 表達(dá)式的運(yùn)算結(jié)果就是它等到的內(nèi)容;

如果它等到的是一個 Promise 對象,await 就就會阻塞后面的代碼,等著 Promise 對象 resolve,然后將得到的值作為 await 表達(dá)式的運(yùn)算結(jié)果。

下面來看一個例子:

function testAsy(x){   return new Promise(resolve=>{setTimeout(() {       resolve(x);     }, 3000)    }   )}async function testAwt(){      let result =  await testAsy("hello world");  console.log(result);    // 3秒鐘之后出現(xiàn)hello world  console.log("cuger")   // 3秒鐘之后出現(xiàn)cug}testAwt();console.log("cug")  //立即輸出cug

這就是 await 必須用在 async 函數(shù)中的原因。async 函數(shù)調(diào)用不會造成阻塞,它內(nèi)部所有的阻塞都被封裝在一個 Promise 對象中異步執(zhí)行。await暫停當(dāng)前async的執(zhí)行,所以"cug""最先輸出,hello world"和 cuger 是3秒鐘后同時(shí)出現(xiàn)的。

3. async/await的優(yōu)勢

單一的 Promise 鏈并不能凸顯 async/await 的優(yōu)勢。但是,如果處理流程比較復(fù)雜,那么整段代碼將充斥著 then,語義化不明顯,代碼不能很好地表示執(zhí)行流程,這時(shí)async/await的優(yōu)勢就能體現(xiàn)出來了。

假設(shè)一個業(yè)務(wù),分多個步驟完成,每個步驟都是異步的,而且依賴于上一個步驟的結(jié)果。首先用setTimeout來模擬異步操作:

/** * 傳入?yún)?shù) n,表示這個函數(shù)執(zhí)行的時(shí)間(毫秒) * 執(zhí)行的結(jié)果是 n + 200,這個值將用于下一步驟 */function takeLongTime(n) {    return new Promise(resolve {        setTimeout(() resolve(n + 200), n);    });}function step1(n) {    console.log(`step1 with ${n}`);    return takeLongTime(n);}function step2(n) {    console.log(`step2 with ${n}`);    return takeLongTime(n);}function step3(n) {    console.log(`step3 with ${n}`);    return takeLongTime(n);}

現(xiàn)在用 Promise 方式來實(shí)現(xiàn)這三個步驟的處理:

function doIt() {    console.time("doIt");    const time1 = 300;    step1(time1)        .then(time2 step2(time2))        .then(time3 step3(time3))        .then(result {            console.log(`result is ${result}`);            console.timeEnd("doIt");        });}doIt();// c:\var\test>node --harmony_async_await .// step1 with 300// step2 with 500// step3 with 700// result is 900// doIt: 1507.251ms

輸出結(jié)果result是step3()的參數(shù)700 + 200=900。doIt()順序執(zhí)行了三個步驟,一共用了300 + 500 + 700 = 1500毫秒,和console.time()/console.timeEnd()計(jì)算的結(jié)果一致。

如果用 async/await 來實(shí)現(xiàn)呢,會是這樣:

async function doIt() {    console.time("doIt");    const time1 = 300;    const time2 = await step1(time1);    const time3 = await step2(time2);    const result = await step3(time3);    console.log(`result is ${result}`);    console.timeEnd("doIt");}doIt();

結(jié)果和之前的 Promise 實(shí)現(xiàn)是一樣的,但是這個代碼看起來會清晰得多,幾乎和同步代碼一樣。

async/await對比Promise的優(yōu)勢就顯而易見了:

代碼讀起來更加同步,Promise雖然擺脫了回調(diào)地獄,但是then的鏈?zhǔn)秸{(diào)?也會帶來額外的理解負(fù)擔(dān);

Promise傳遞中間值很麻煩,?async/await?乎是同步的寫法,?常優(yōu)雅;

錯誤處理友好,async/await可以?成熟的try/catch,Promise的錯誤捕獲比較冗余;

調(diào)試友好,Promise的調(diào)試很差,由于沒有代碼塊,不能在?個返回表達(dá)式的箭頭函數(shù)中設(shè)置斷點(diǎn),如果在?個.then代碼塊中使?調(diào)試器的步進(jìn)(step-over)功能,調(diào)試器并不會進(jìn)?后續(xù)的.then代碼塊,因?yàn)檎{(diào)試器只能跟蹤同步代碼的每?步。

4. async/await 的異常處理

利用 async/await 的語法糖,可以像處理同步代碼的異常一樣,來處理異步代碼,這里還用上面的示例:

const exe = (flag) => () new Promise((resolve, reject) => {    console.log(flag);    setTimeout(() {        flag ? resolve("yes") : reject("no");    }, 1000);});

關(guān)鍵詞: 回調(diào)函數(shù) 異步操作 狀態(tài)改變 繼續(xù)執(zhí)行

相關(guān)新聞

Copyright 2015-2020   三好網(wǎng)  版權(quán)所有 聯(lián)系郵箱:435 22 640@qq.com  備案號: 京ICP備2022022245號-21
日本欧美亚洲国产啊啊啊| 亚洲美女色www色| av激情四射五月婷婷| 最新中文字幕久久久久| 黄色片黄色片黄色片黄色片黄色| 有码一区二区三区四区五区| 蜜桃臀av在线一区二区| 中文字幕福利视频第四页| 国产一级一国产一级毛片| 情趣视频在线观看91| 4438全国成人免费视频| 国色天香一二三期区别大象| 麻豆国产91制片厂| 中文字幕中文字幕在线中…一区| 午夜夫妻性生活视频| 久久热在线免费观看| 国产欧美福利在线观看| av大尺度一区二区三区| 亚洲综合第一区二区| 91精品久久久久久久久99蜜臀| 中文字幕一区二区三区久久久| 四虎国产精品国产精品国产精品| 91精品资源在线观看| 四虎国产精品国产精品国产精品| 人妻视频网站快射视频网站| 亚洲午夜熟女在线观看| 久久99精品久久久久久三级| 亚洲综合成人精品成人精品| 老司机伊人99久久精品| 五月天天堂视频在线| 亚洲少妇视频在线观看| 亚洲午夜精品视频节目| 亚洲欧美国产一本综合首页| 大香蕉在线欧美在线视频| 操烂你的骚逼天天欧美| 久久99国产中文丝袜| 92麻豆一区二区三区| 欧美日韩一区二区三区成人影院| 91性高湖久久久久久久久久| 开心激情五月天作爱片| 亚洲a区在线免费观看| 白白色在线免费视频发布视频 | 日本一区二区高清av中文| 大陆中文字幕视频在线| 全球高清中文字幕av| 国产午夜在线播放视频| 男人电影天堂在线观看| 男人用大鸡巴狂操女人肉穴| 亚洲午夜精品视频节目| 亚洲成人中文无码在线| 人妻系列级片在线观看视频| 日本久久久久久黄色| 人妻超清中文字幕在线乱码| 亚洲国产精品久久久久久无码| 国产精品视频网站污污污| 美女黄色啊啊啊啊视频| 亚洲一区二区中文字幕久久| 污网址在线观看视频| 欧美精品999不卡| 日韩欧美中文字幕老司机三分钟 | 川上优所有中文字幕在线| 五月婷婷伊人久久中文字幕| 十八禁黄色免费污污污亚洲| 伊人网在线欧美日韩在线| 美女把逼扒开让男人桶| 不用付费特黄特色亚洲特级黄色片 | aa福利影视在线观看| 亚洲国产综合久久精品| 美女把逼扒开让男人桶| 国产精品午夜无码AV体验区| 68福利精品在线视频| 核xp工厂精品久久亚洲| 久久久久夜色国产精品电影| 2020精品视频在线| 人妻色综合aaaaaa网| 中文字幕熟女人妻丝袜丝在线| av在线免费在线观看| 99在线视频精品观看高| 国产人妻777人伦精品hd超碰| 国产精品中文字幕丝袜| 午夜免费福利老司机| 欧美一级日韩一级亚洲一级va| 久久内射天天玩天天懂色| 一区二区三区观看在线| 91久久精品美女高潮喷水白浆| 大香焦一道本一区二区三区| 手机看片1024精品国产| 熟女国内精品一区二区三区| 久久国产精品久精国产爱| 亚洲综合第一区二区| 岛国av成人午夜高清| 婷婷色九月综合激情丁香| 青青青青青爽视频在线| 国产激情免费在线视频| 久久99热精品免费观看视| 操操操操操操操操操网| 九九热在线精品播放| 亚洲欧洲一区二区三区在线| 亚洲成人三级黄色片| 日本高清在线观看不卡视频| 精品国模一区二区三区欧美| 漂亮人妻口爆久久精品| 国产成人情侣激情视频| 岳的大肥屁熟妇五十路| 蜜臀久久精品久久久久久av| 青青操91美女国产| 中文字幕精品人妻久久久久| 日韩成人在线电影首页| 青青青青青爽视频在线| 美女扒开逼逼给你看| 青青青在线观看国产| 婷婷色综合五月天视频| 国产激情视频在线观看的| 一区二区三区四区影片| 顶级欧美色妇4khd| 少妇精品视频一区二区免费看| 亚洲男人天堂最新网址大全| 人妻色综合aaaaaa网| 亚洲欧美精品海量播放| 国产精品国产三级在线高清观看| 久久久久夜色国产精品电影| 日韩国产欧美久久一区| 东京热日韩av在线| 男人的天堂aⅴ在线| 中文字幕日本一二三区| 一级做性色a爱片久久片| 亚洲自拍偷拍一区二区中文字幕| 松本菜奈实最新av在线| 欧美情色av在线观看| 性感美女极品18禁网站在线| 一级做性色a爱片久久片| 小妹妹爱大棒棒免费观看视频| 91精品国产综合99| 九热精品视频在线观看| 黑人和日本人av一区二区| 中文字幕丰满子伦无码专区 | 91激情四射婷婷综合| 欧美日本亚欧在线观看| 日本一道中文字幕99| 中文字幕久久久国产| 欧美日韩国产在线中文字幕| 精品一区二区三区免费毛片W| xxxx69在线观看视频| 有码一区二区三区四区五区| av资源中文字幕在线观看| 无人区一码二码三码区别在哪| 三级欧美日韩一区二区三区| 户外露出视频在线观看| 天堂一区二区三区在线等| 伊人免费观看视频一| 狠狠操深爱婷婷综合一区| 天天干夜夜操夜夜骑| 中文字幕日本一二三区| 男人av一区二区三区| 国产乱码有码一区二区三区| 欧美一区二区三区爽爽| 欧美一级特黄大片做受99| 呻吟求饶的人妻中文字幕| 最近日韩免费在线观看| 中文字幕观看中文字幕免费 | 欧美丝袜亚洲国产日韩| 中文字幕 中文字幕 亚洲| 婷婷一区二区三区五月丁| 中文字幕国产一区在线视频| 亚洲一区二区精品在线播放| 一区二区三区免费版在线| 日本熟女0930视频| 男人资源站中文字幕| 国产黄色主播网址大全在线播放| 男人的天堂av中文字幕| 加勒比不卡在线视频| 欧美啪啪一区二区三区| yy4080黄色片| 成人资源中文在线观看| 亚洲美女黄色福利视频网站大全| 日韩女同与成人用品电影免费看| 老司国产精品视频免费观看| 91九色pony蝌蚪| 97精品人妻免费视频| 青娱乐免费最新视频| 嗯~嗯~啊啊啊~高潮了软件 | 国产精品网站的黄色| 狠狠干狠狠操免费视频| 成年人黄色日本视频| 精品免费一区二区三区四区视频| avgo成人短视频| 国产伦理二区三区在干嘛呢| 黄色大片一级老太太操逼| 国产精品中文字幕丝袜| 天堂av在线最新地址| 国产自拍偷拍视频在线免费观看| 川上优所有中文字幕在线| 人妻免费视频黄片在线视频| 国产福利一区二区三区在线观看 | 在线免费视频999| 亚洲国内精品久久久久久久| 亚洲av毛片一区二区三区网| 最近在线中文字幕免费| 中文字幕在线免费观看人妻| 中文字幕福利视频在线一区| 色网站在线观看免费| 亚洲黄色成人一级片| 亚洲欧美韩国日本一区二区| 熟女国内精品一区二区三区| 在线观看中文字幕少妇av| 中文字幕国产一区在线视频| 黄色片免费国产精品| 麻豆白洁少妇在线播放| 内地精品毛片在线观看| 亚洲中文字幕在线视频观看二区 | 熟女俱乐部jukujoclub| 国产av高清二区三区| 九九热在线精品播放| 快色视频在线观看免费| 大尺度av毛片在线网址| 国产 亚洲 欧美 自拍| 福利视频导航在线观看| 天天早上头和脸出汗是怎么办| 亚洲色图日韩在线视频观看| 97人妻人人揉人人躁人人夜夜爽| 中文人妻av一区二区三区| 一区二区三区不卡免费视频网站| 天天操天天干加勒比久久| 青青操久久综合激情| 啊不行啊操逼好爽大鸡吧视频| 免费中文三级在线观看| www一区二区91| 青青青青午夜手机国产视频| 国产午夜在线播放视频| av网页免费在线观看| 亚洲 自拍 激情 另类| 91污污在线观看视频| 偷拍欧美日韩另类图片| 亚洲人人爽人人澡起碰av| 美女张开腿给男人桶爽的软件| 92午夜免费福利视频www| 快使劲弄我视频在线播放| 亚洲最强的25个城市| 美利坚合众国av天堂| 久久久人妻免费视频| 免费绝清毛片a在线播放| 亚洲国产综合久久精品| 老司机在线视频福利观看| 美女福利视频一区二区三区四区 | 可以免费观看日韩av| 欧美日韩综合精品无人区| 99国产精品久久99久久久| xxoo福利视频导航| 日本高清久久人人爽| 欧美男男在线观看视频网站| 青娱乐免费最新视频| 日本午夜福利免费在线播放| 深夜福利免费观看在线看| 美女网站福利在线观看| 色丁香久久激情综合网| 成人午夜麻豆大胆视频| 蜜臀久久精品久久久久久av| 最近最新欧美日韩精品| 高清国产美女a一级毛片| 午夜福利在线不卡视频| 中文乱码字幕人妻熟女人妻| 免费在线观看视频啪啪| 久久久国产精品免费视频网| 美女福利网站在线播放| 在线免费观看欧美小视频| 欧美日韩国产在线中文字幕| 综合久久伊人久久88| 狠狠操狠狠操狠狠插| 午夜福利国产精品久久久久| 欧美肥妇久久久久久| 99国产精品久久99久久久| 成人免费视频现网站99在线观看| 强乱人妻中文字幕日本| 大香蕉尹人在线最新| 亚洲成人,国产精品| av 资源在线播放| 天天干夜夜爽狠狠操| 亚洲综合成人精品成人精品| 亚洲欧美成人午夜一区二区| 顶级欧美色妇4khd| 亚洲一区二区精品在线播放| 日韩成人精品久久久免费看| 国产精品国产三级在线高清观看| 黄片操操操操操操c| 天天操天天舔天天做| 人妻被强av系列一区二区| 免费在线观看亚洲福利| 欧美一区二区三区视频看| 黑人爆操女人免费视频| a级黄片免费观看| 色丁香久久激情综合网| 老司机免费视频福利0| 国产一级一国产一级毛片| 欧美啪啪一区二区三区| 天天爱天天日天天爽| 嗯~嗯~啊啊啊~高潮了软件| 精久久久久久久久久久久| 911美女片黄在线观看| 亚洲熟女少妇中文字幕系列| 五月激情婷婷四射基地| 亚洲精品激情视频在线观看 | 日韩人妻中文字幕区| 69视频在线精品国自产拍| 久久99久久99久久97的人| 亚洲一区亚洲二区成人福利| 日本特级黄片免费观看| 亚洲avav天堂av在线网毛片| 日本一本午夜在线播放| 99久久国产精品免费消防器材| 亚洲精品一区二区gif| 欧美区日本区国产区| 视频免费在线观看网站| 在线国产精品欧美| 中文字幕 人妻 熟女| 欧美精品激情在线不卡| 国产探花自拍亚洲av| 中文字幕 首页 人妻| 久久综合狠狠综合久久综| 国产精品久久久99| 西野翔人妻中文字幕中字在| 亚洲成人,国产精品| 黑人侵犯人妻森泽佳奈| 68视频在线免费观看| 中文字幕 首页 人妻| 黄色av 在线观看| 68视频在线免费观看| 亚洲欧洲一区二区三区在线| 大成色亚洲一二三区| 91精品视频在线观看视频| 午夜野花视频在线观看| 久久视频 在线播放| 加勒比不卡在线视频| 欧美一级日韩一级亚洲一级va| 日韩人妻中文字幕区| 360偷拍蜜桃臀69式| 亚洲成人动漫av在线| 欧美成人屋影院在线视频观看| 国产 亚洲 欧美 自拍| 福利小视频免费在线| 欧洲亚洲一区二区三区四区| 国产高清自拍偷拍在线| 中文字幕麻绳捆绑的人妻| av天堂a亚洲va天堂va里番| 红桃视频国产av在线| 天天看天天爱天天日| 国产美女视频带a∨黄色片| tushy一区二区三区视频| 女人高潮潮呻吟喷水网站| 顶级欧美色妇4khd| 亚欧洲乱码视频一二三区| 夜夜躁婷婷av蜜桃妖| 国产91精品福利系列| 高潮喷水一区二区三区| 一区二区三区 国产日韩欧美| 日本东京热视频欧美视频| 视频自拍偷拍视频自拍| 顶级欧美色妇4khd| 一区二区三区四区久久久久韩日| 99久久免费播放在线观看视频| 91精品国产91久久久久久密臀| 精品视频一区二区三区◇| 久久99热精品免费观看视| tobu8日本高清| 60路70路日本熟妇| 亚洲av日韩久久网站| 人妻系列中文字幕大乳丰满人妻 | 久久久久国产精品二区| 亚洲乱码av一区二区蜜桃av| 青青青国产精品视频| 天天干天天操天天日天天日| 中文字幕中文字幕在线中…一区| 日本欧美高清在线观看视频| 午夜情色一区二区三区| 日产国产欧美精品另类| 18福利视频在线观看| 夜色17s精品人妻熟女av| 中文字幕一区二区人妻视频| 欧美日本在线免费视频| 高清av在线婷一区二区色日韩| 国产肥胖熟女又色又爽免费视频 | 国产精品网站亚洲发布| 天天搞天天操天天干| 国产精品久久久久久成人久| 色网站在线观看免费| 午夜福利午夜福利影院| 3344永久在线观看视频下载| 天天搞天天操天天干| 日本东京热最新中文字幕| 最近最新欧美日韩精品| 蜜臀久久精品久久久久久av | 国产精品久久人人添| 人人妻人人爽人人爽欧美一区 | 99免费观看在线视频| 久久久久高潮白浆久久| 女生裸体视频免费网站| 天天日 天天舔 天天射| 欧美 日韩 精品 中文| 户外露出视频在线观看| 最新国产精品综合网高清| 熟女阿高潮合集一区二区| 久久久久久久岛国免费观看| 97cao在线视频| 老司国产精品视频免费观看| 亚洲欧美日韩中文视频| 精品不卡一区二区三区| av在线免费在线观看| 97视频人人爱麻豆| 久草视频在线看免费| 嗯~嗯~啊啊啊~高潮了软件| 成人免费视频现网站99在线观看| 人妻熟女 亚洲 一页二页| 日韩三级精品电影久久久久| 三区美女视频在线观看| 天天操天天射天天操天天日| 91精品国产欧美在线| 亚洲欧美另类丝袜另类自拍| 亚洲人成大片在线观看| 女同大尺度视频网站在线观看| 手机看片1024精品国产| 黑人大巨屌操美女逼| 中文字幕日韩人妻在线三区| 国产精品久久久久久成人久| 欧美日韩久久丝袜在线 | 国产精美视频精品视频精品| 欧美日韩亚洲tv不卡久久| 懂色av之国产精品| 亚洲欧美精品海量播放 | 午夜3p福利视频合集| 中文字幕熟女人妻一区| 51vv精品视频在线观看| 999久久久人妻精品一区| 亚洲成年人精品国产| 天天爽天天操天天插| 天天干天天日天天弄| 99久久人人爽亚洲精品美女| 国产资源在线观看二区| 亚洲精品综合欧美精品综合| 欧美三区四区在线视频| 五月激情婷婷四射基地| 青娱乐免费最新视频| 国产av啊啊啊啊啊啊啊| lutu玩弄人妻短视频| 日本福利视频网站导航| 真人一进一出抽搐大尺度视频| 亚洲成人欧洲成人在线| 污网址在线观看视频| 深夜福利免费观看在线看| 中出小骚货在线观看| 老司机免费视频福利0| 亚洲综合在线视频在线播放| 92午夜免费福利视频www| 亚洲高清免费在线观看视频| 亚洲黄色免费在线观看网站| 麻豆国产精品777777在| 91系列视频在线播放| 国产自拍偷拍在线精品| 亚洲av手机免费在线| 男生用大肌巴操美女骚穴| 91大神福利视频网| 亚洲欧美综合另类最新| 亚洲色大WWW永久网站| 高潮喷水在线视频观看| 国产精品igao为爱寻找激情| 在线看日韩av不卡| 久久久精品人妻无码专区不卡 | 亚洲理论在线a中文字幕97| 午夜精品视频免费观看| 亚洲中文字幕在线视频观看二区| 亚洲最大的自拍偷拍网| 九九热在线精品播放| 美女福利视频一区二区三区四区 | 亚洲制服丝袜美腿在线| 亚洲成人自拍图片网站| 国产精品乱码高清在线观看h| 后入日韩翘臀蜜桃臀美女| av在线播放观看h| 午夜亚洲国产精品中字| 91精品夜夜夜一区二区| 黄在线看片免费人成视频| 国产肥胖熟女又色又爽免费视频| 亚洲国产精品青青草| 亚洲永远av在线播放| 日本一道中文字幕99| 欧美精品一区二区三区观看| 亚洲av手机免费在线| 免费24小时人妻视频| 亚洲中文字幕无线乱码人妻精品| 韩国在线播放一区二区三区| 午夜久久久久欠久久久久| 日本东京热最新中文字幕| 超碰在线免费观看视频97| 中文字幕 首页 人妻| 97成人老师在线视频| 日本少妇精品免费视频| 九一精品人妻一区二区三区| 国产成人情侣av在线| av在线观看视频免费| 亚洲一区二区中文字幕久久| 亚洲激情视频在线观看免费| 亚洲a级视频在线播放| 亚洲欧美日韩中文在线观看| 午夜宅男电影av网站| 黄很色很在线免费视频网站| 偷拍熟女大胆免费视频| 中文字幕 中文字幕 亚洲| 全球高清中文字幕av| 亚洲欧美另类丝袜另类自拍| 日本电影一级人妻在线播放四区| 欧美日韩精品aaa| 最新日韩av电影在线播放| 99久久国产精品免费消防器材| 日本一区二区三区调教性奴视频| 亚洲午夜高清在线观看| 中文字幕 首页 人妻| 国产夫妻视频在线观看免费| 国内自拍第一区二区三区| 黄色片黄色片黄色片黄色片黄色| 综合久久伊人久久88| 亚洲国内精品久久久久久久| 久久亚洲国产成人精品麻豆| av毛片在线观看网址| 黑人侵犯人妻森泽佳奈| 欧美巨大另类极品video| 夜夜人人干人人爱人人操| 自拍偷拍视频亚洲一区| 亚洲春色av中文字幕| 裸日本资源在线午夜| 黄色片黄色片黄色片黄色片黄色| 青娱乐免费视频一二三| 亚av一二三在线观看| 国产清纯一区二区在线观看| 亚洲综合首页综合在线观看| 偷拍欧美日韩另类图片| 色狠狠色综合久久久绯色| 亚洲 偷拍 自拍 欧美| 大香蕉在线欧美在线视频| 中文字幕麻绳捆绑的人妻| 97精品视频,全部免费| 欧美亚洲国产一区二区| 成人人妻h在线观看| 欧美色区国产日韩亚洲区| 大鸡扒操大逼大片免费关看| 美女黄色啊啊啊啊视频| 最新激情中文字幕视频| 色欲AV蜜桃一区二区三| 91美女在线观看视频| 久久久亚洲综合国产精品| 国产精品国产三级在线高清观看| 乌克兰美女操逼高清内射视频| 国产精品蝌蚪自拍视频| yy4080黄色片| 国产精品蝌蚪自拍视频| 不卡一二三区别视频| 日韩欧美国产一区二区在线观看| 亚成区一区二区人妻熟女| 亚洲成人自拍图片网站| 熟女人妻aⅴ一区二区三| 18禁男女啪啪啪无遮挡| av在线播放观看h| 182tv精品免费在线观看| 裸日本资源在线午夜| 日本一区二区三区的资源| 欧美日韩在线观看免费播放| 欧美情色av在线观看| 精品国产无乱码一区二区三区| 四季av人妻一区二区三区| 亚洲a级视频在线播放| 黄色片免费网站在线| 河北全程露脸对白自拍| 欧美黄色一区二区三区视频| 国产精品网站亚洲发布| 在线国产精品欧美| 日本香港韩国三级黄色| 欧美日韩福利视频网| 自拍丝袜国产欧美日韩| 黄片视频免费观看视频| 中文字幕熟女人妻一区| 骚穴被阴茎插免费视频| 天天夜夜久久精品综合| 夜夜爽夜夜操夜夜爱| 亚洲一区在线视频观看地址| 岳的大肥屁熟妇五十路| 国产人妻777人伦精品hd超碰| 亚av一二三在线观看| 伊人网在线观看 视频一区| 成人午夜高清福利视频| 黑吊操欧美极品美女| 亚洲一区二区在线视频观看免费| 天天插天天操天天射天天干| 美女精品久久久久久久久| 插鸡视频免费网站在线播放| 97cao在线视频| 午夜精品久久久久久久久久蜜桃| 大香蕉尹人在线最新| 伊人情人成综合视频| 天海翼亚洲一区在线观看| 久久内射天天玩天天懂色| 国产精品剧情在线亚洲| 2026天天操天天干| 国产成人深夜福利短视频99| 自拍丝袜国产欧美日韩| 欧美在线视频不卡一区| 手机看片1024精品国产| 91佛爷视频在线观看| 裸露视频免费在线观看| 在线免费观看欧美小视频 | 韩国毛片w妈妈的朋友7| 黄很色很在线免费视频网站| 制服丝袜中文字幕熟女人妻| 极品风骚人妻3p视频| 欧美男男在线观看视频网站| 黑吊操欧美极品美女| 一区二区三区国产在线成人av | 亚洲综合色一区二区三区| tushy一区二区三区视频| 啊~插得好快别揉我胸了视频| 国产av啊啊啊啊啊啊啊| 日本香港韩国三级黄色| avtt中文字幕手机版| yellow在线亚洲精品一区| 欧美vs亚洲vs日韩| 九九热精品视频在线播放| 一区二区三区四区久久久久韩日| 成人大片男人的天堂| 红桃视频国产av在线| 顶级欧美色妇xxxx| 午夜五十路久久福利| 美国伦理片午夜理论片| 人妻人妻在线视频网站| 亚洲美女a级黄色在线播放| xxnxx国产美女| 午夜福利国产精品久久久久| 日韩一级欧美一级片| 亚洲码av一区二区三区| 国产精品剧情av在线播放| ysl蜜桃色7425| 上床啪啪啪免费视频| 人妻系列中文字幕大乳丰满人妻| 91精品一区一区三区| 国产自拍偷拍在线精品| 国产精品久久久久久成人久| 宅男噜噜噜66国产在线观看| 午夜在线观看一级毛| 亚洲三级综合在线观看| 中文字幕欧美一区二区视频| 91精品麻豆91夜夜骚| 国产白丝一区二区三区av| 欧美亚洲国产一区二区| 亚洲春色av中文字幕| 在线中文字幕人妻av| 欧美色区国产日韩亚洲区| 欧美日韩一区二区三区成人影院 | 亚洲美女午夜激情视频在线观看| 亚洲中文字幕无线乱码人妻精品| 亚洲人成大片在线观看| 大屁股熟女一区二区视频| 熟妇高潮久久久久久久| 九一精品人妻一区二区三区| 美女张开腿给男人桶爽的软件 | 亚洲乱熟女一区二区三区山| 天天操天天干加勒比久久| 一区二区三区四区影片| 女生裸体视频免费网站 | 裸露视频免费在线观看| 3344永久在线观看视频下载| 欧美第一激情综合网欧美激情| 欧美一级特黄大片在线| 亚洲成人三级黄色片| 夏目彩春av在线看| 亚洲成人欧洲成人在线| 久久99久久99久久97的人| 可以直接看av网站| 手机看片1024精品国产| 日本福利网站一区二区| 一看就是假奶的av| 亚洲中文字幕无线乱码人妻精品| 99国产精品久久99久久久| 欧美亚洲愉拍一区二区三区| 亚洲最大的自拍偷拍网| 中文人妻av一区二区三区| 成人精品影视一区二区| 91亚洲最新蜜桃在线| 自拍偷自拍亚洲精品10p| 东京热日韩av在线| 一区二区三区资源视频| 97超碰人人爽人人做| 91九色人妻在线播放| 上床啪啪啪免费视频| 国产乱码有码一区二区三区| 成年人黄色日本视频| 久久精品国产亚洲av清纯| 亚洲中文字幕在线视频观看二区| 99福利一区二区视频| 中文字幕人妻一区二区视频系列| 午夜久久人妻一级内射av网址| 亚洲国产日韩a在线欧美| 全球高清中文字幕av| 国产激情视频在线观看的| 欧美成人一二三在线网| 亚洲人成大片在线观看| 真人一进一出抽搐大尺度视频| 亚洲成人自拍图片网站| 欧美一区日韩二区三区四区| 美女福利网站在线播放| 伊人网在线免费观看| 亚洲男人天堂最新网址大全| 欧美熟女xx00视频| 福利视频免费在线播放| 日本a级2020在线观看| 国产一级一国产一级毛片| 欧美成人一二三在线网| 一区二区九日韩美女| 大鸡扒操大逼大片免费关看| 999久久久人妻精品一区| 男女爱爱好爽视频免费看| 亚洲精品一区二区gif| 亚洲va999天堂va| 九热精品视频在线观看| 丰满放荡熟妇在线播放| 大片a免费观看在线视频观看| 女生裸体视频免费网站| 91中文字幕视频网站| 国产做A爱免费视频在线观看| 婷婷六月天在线视频| 久99久视频免费观看中文字幕| 18福利视频在线观看| av里面的动作是真进去吗| 免费观看在线中文字幕视频| 中文字幕在线观看av观看| 丰满少妇高潮喷水视频| 人妻系列在线免费视频| 欧美丝袜亚洲国产日韩| 黑人侵犯人妻森泽佳奈| 日韩加勒比精品在线看| 开心五月综合激情婷婷| 桃色成人开心激情网| av天堂hezyo| 天天夜夜久久精品综合| 在线成人教育平台排名| 亚洲熟女人妻自拍在线视频| avtt中文字幕手机版| 日本不卡 中文字幕| 91进入蜜桃臀在线播放| 日本少妇熟女乱码一区二区| 日本小视频一区二区| 视频自拍偷拍视频自拍| 欧美在线视频不卡一区| av里面的动作是真进去吗| 国产精品午夜无码AV体验区| 亚洲综合色一区二区三区| 国产做A爱免费视频在线观看| 在宿舍强奷两个清纯校花| 亚洲美女黄色福利视频网站大全| 91污污在线观看视频| 日韩国产欧美久久一区| 亚洲妹妹我爱你在线观看| 欧美猛少妇色ⅹⅹⅹⅹⅹ猛叫| 一区二区三区四区久久久久韩日| 911精产国品一二三产区区| 97人妻av人人澡人人爽| 55夜色66夜色亚洲精品| 国产精品性感美女视频| 在线中文字幕人妻av| 亚洲va999天堂va| 99免费观看在线视频| 国产午夜在线播放视频| 白白色在线免费视频发布视频| 蜜乳av中文字幕一区二区| 人人妻人人澡人人爽97| 女人高潮潮呻吟喷水网站| 一区二区三区午夜福利在线| 两个奶被揉得又硬又翘怎么回事| 在宿舍强奷两个清纯校花| 日韩三级黄色大片在线观看| 91进入蜜桃臀在线播放| 欧美亚洲另类精品第一页| 亚洲蜜桃久久久久久| 在线观看中文字幕精品av| 五月的婷婷综合视频| 成熟了的熟妇毛茸茸| 2018中文字字幕人妻| 美利坚合众国av天堂| 一区二区三区免费版在线| 亚洲av网站一区二区三区| 欧美一区二区三区视频看| 夏目彩春av在线看| 天堂av国产av伦理av| 在线 制服 中文字幕 日韩| 中文字幕一区二区三区久久久 | 亚洲全国精品女人久久久| ysl蜜桃色7425| 四虎精品久久免费最新| 2020国产成人精品视频| 亚洲精品综合欧美精品综合| 好看的日本中文字幕在线观看二区| 性感人妻 中文字幕| 日本黄页在线观看视频| 国产激情免费在线视频| 欧美aaaa性bbbbaaaa| 青娱乐免费最新视频| 欧美老熟妇xxoo老妇| 久久久久久高清一区| 每日更新日韩欧美在线| 乌克兰美女操逼高清内射视频| 国产自拍偷拍视频在线免费观看| 不用付费特黄特色亚洲特级黄色片| 在线 制服 中文字幕 日韩| 男女插鸡巴视频软件| 91超精品碰国产在线观看| 午夜福利在线不卡视频| 爱搞视频在线观看视频91| 色噜噜噜噜色噜噜色合久一| 亚洲avav天堂av在线网毛片| 美女把逼扒开让男人桶| 亚欧洲乱码视频一二三区| 久久久亚洲综合国产精品| 一区二区三区不卡免费视频网站| 熟女阿高潮合集一区二区| jiee日本美女视频网站| 久操资源在线免费播放| 综合久久伊人久久88| 国产91九色视频在线观看| 亚洲乱熟女一区二区三区山| 免费看日韩黄视频在线观看| 九热精品视频在线观看| 91精品综合久久久久久五月天| 桃色成人开心激情网| 自拍偷拍 国产激情| 熟妇高潮久久久久久久| 亚洲在线观看中文字幕av| 老牛影视在线一区二区三区| 亚洲综合成人精品成人精品| 久久久久久a女人处女| 亚洲第一区av中文字幕| caopeng97在线观看视频| 污网址在线观看视频| 台湾18禁久久久久久久激情视频| 不卡高清一区二区三区| 国产精品视频网站污污污| 麻豆午夜激情在线观看| 50熟妇一区二区三区| 亚洲一区二区三区无码在线| 欧美久久蜜臀蜜桃资源吧| 福利小视频免费在线| 亚洲熟妇丰满多毛xxxx网站| 亚洲另类欧美综合久久| 9久re热视频在线精品| 中文字幕av人妻一区二区三区| 日韩人妻中文字幕二区 | 久久99精品久久久久久三级| 人妻少妇精品二三区| 啪啪啪网站免费看视频| 日本久久久久久黄色| 中文字幕一区二区三区久久久| 亚洲人成大片在线观看| 精品美女洗澡一区二区| 免费的啪啪视频软件| 在线免费观看a视频免费| 欧美一级特黄大片在线| 99久久免费播放在线观看视频| 福利一二三在线视频观看| 亚洲美女a级黄色在线播放| 国产亚洲综合5388| 女人的天堂av在线网| 99久9在线视频播放| 男女啪啪啪网站在线观看免费| 亚洲欧美综合另类最新| 91精品一区一区三区| 91精品久久久久久久久99蜜臀| 最近中文字幕免费视频一| 97精品国产91久久久| 欧美啪啪一区二区三区| 男人的天堂av中文字幕| 黑人巨大精品一区二区在线| 欧美成人久久久桃色aa| 欧美日韩在线观看免费播放| xxoo福利视频导航| 狂操鸡巴小骚逼视频免费观看| 国产精品igao为爱寻找激情| 午夜精品老牛av一区二区三区| 又粗又长又硬又黄又爽| 久久无码高清免费视频| 香港日本台湾经典三级| 天天看片天天摸天天操| 视频免费在线观看网站| 熟妇人妻av无码中文字幕| 久久久国产精品免费视频网| 麻豆国产91制片厂| 美女张开腿给男人桶爽的软件| 国产精品福利久久久久| 97人妻人人揉人人躁人人夜夜爽| 东京热日韩av在线| 日韩久久不卡免费视频| av丝袜免费在线观看| 男女插鸡巴视频软件| 天天日天天干天天日天天干天天| 核xp工厂精品久久亚洲 | 人人妻人人爽人人爽欧美一区| 另类欧美激情校园春色| 亚洲欧美另类校园春色| 欧美亚洲愉拍一区二区三区| 日本在线免费观看国产精品| 裸日本资源在线午夜| 精品高潮呻吟久久av| 精品人妻人人做人人爽| 夜夜操天天干夜夜操| 国产一区二区三区四区精| 中文字幕亚洲乱码精品无限| 91人妻人人做人人爽高清| 天堂av在线最新地址| 天天干夜夜操91视频网站| 欧美一级日韩一级亚洲一级va | 182tv精品免费在线观看| 欧美老熟妇xxoo老妇| 日韩成人免费观看电影| 亚洲男人天堂最新网址大全| 成人av在线视频免费| 欧美区日本区国产区| 中文字幕av人妻一区二区三区 | 黄片视频免费观看视频| 女人的天堂av在线网| 伊人网在线免费观看| 国产黄色主播网址大全在线播放| 亚洲图片另类综合小说| av福利免费体验观看| 偷拍熟女大胆免费视频| 一区二区三区不卡免费视频网站| 户外露出视频在线观看| 国产精品久久人人添| 欧美视频免费观看777| 亚洲av手机免费在线| 最新中文字幕久久久久| 丰满人妻被猛烈进入中文字幕| 国产,亚洲,欧美综合| 55夜色66夜色亚洲精品| 天天插天天透天天爽| 亚洲欧美日韩中文视频| 欧美精品熟妇免费在线| 亚洲一区二区偷拍女厕所| 亚洲国产精品青青草| 亚洲av在线免费播放| 大成色亚洲一二三区| 免费绝清毛片a在线播放| 超碰在线免费观看视频97| 中文字幕人妻精品精品| 丰满少妇_区二区三区| 岳母的诱惑电影在线观看| 99热这里只有精品免费播放| 国模伊人久久精品一区二区三区| 操死你美女在线视频| 91精品国产欧美在线| 一区二区三区不卡免费视频网站| 国产男女无套?免费网站下载| 亚洲中文字幕无线乱码人妻精品| 欧美日本在线免费视频| 精品美女洗澡一区二区| 天天干夜夜爽狠狠操| 夜夜骚av一二三区| 亚洲最大的自拍偷拍网| 色狠狠色综合久久久绯色| 91色老久久精品偷偷蜜臀| 国产午夜羞羞一区二区三区| 免费绝清毛片a在线播放| 青青青在线视频免费播放| 91偷拍被偷拍在线播放| 男人的天堂av中文字幕| 久久99精品久久久久久三级| 蜜桃臀少妇白色紧身裤细高跟| 亚洲av毛片在在线播放| 一区二区三区四区视频精品免费| 欧美三区四区在线视频| 猫咪亚洲中文在线中文字幕| 亚洲欧美国产人成在线| 黑人3p日本女优中出| 青青青在线视频观看97| 久久亚洲国产成人精品麻豆| 天堂一区二区三区在线等| 亚洲精品激情视频在线观看| 有码一区二区三区四区五区| av在线免费在线观看| 3344永久在线观看视频下载| 中文字幕 人妻 熟女| 久久av色噜噜ai换脸| 亚洲成人三级黄色片| 亚洲一区视频中文字幕在线播放| 中文字幕在线观看av观看| 69久久夜色精品国产69乱电影| 国产av精品一区二区三区久久| 午夜夫妻性生活视频| 亚洲美女午夜激情视频在线观看 | 99精品久久99久久久久一| 女人的天堂av在线网| 精品国模一区二区三区欧美| 青青青在线视频观看97| 国产精品内射婷婷一级| 2020国产激情视频在线观看| 日本午夜福利免费在线播放| 九九热在线精品播放| 成人黄色录像在线观看| 国产 少妇 一区二区| 92午夜免费福利视频www| 成人午夜麻豆大胆视频| 欧美操大黑鸡巴视频在线观看| 国产精品 亚洲欧美 自拍偷拍| 汤姆提醒30秒中转进站口| 欧美亚洲另类精品第一页| 久久99热精品免费观看视| 91激情四射婷婷综合| 国产成人情侣激情视频| 天天干天天操天天要| 男人的天堂aⅴ在线| 亚洲黑人欧美二区三区| 亚洲永远av在线播放| 1级黄色片在线观看| 亚洲第一区av中文字幕| 伦理在线观看未删减中文字幕| 自拍偷拍亚洲综合第一页| 欧美第一激情综合网欧美激情| 开心激情五月天作爱片| 不用付费特黄特色亚洲特级黄色片| 午夜福利国产精品久久久久| 极品少妇高潮喷水日出白浆| 乱子伦国产一区二区三区| 天天操,天天射,天天爽| 宅男噜噜噜66国产在线观看| 午夜久久久久欠久久久久| 岛国av成人午夜高清| 午夜呻吟亚洲精品中文字幕在上面| 久久久国产精品免费视频网| 日本丰满熟妇浓密多毛| 亚洲综合一区二区三区四区| 欧美黄色性视频网站| 国产熟女五十路一区二区三区| 午夜8050免费小说| 女人扒开逼让男人操| 99精品久久99久久久久一| caopeng97在线观看视频| 91精品夜夜夜一区二区蜜桃| 国产美女主播av在线| 国产亚洲精品啪啪视频| 91大神福利视频网| 最新国产精品久久精品app| 中文字幕在线免费观看成人| 日韩成人在线电影首页| 久久久久性感美女偷拍视频| 天天日天天干天天日天天干天天| 玖辛奈18禁同人污本子| 欧美肥妇久久久久久| 免费在线观看亚洲福利| 两个人在一起靠逼啊啊啊| 91porny九色视频偷拍| 欧美大胆a级视频秒播| 久草久热这里只有精品| 一区二区在线观看视频网站| 午夜福利国产精品久久久久 | 亚洲午夜高清在线观看| 在线免费视频999| 黑鸡巴肏少妇逼视频| 欧美精品一区二区三区观看| 夜夜爽夜夜操夜夜爱| 极品内射老女人操逼视频| 亚洲精品国品乱码久久久久| 91九色人妻在线播放| 欧美不卡一二三区精品| 92麻豆一区二区三区| 熟女俱乐部jukujoclub| 日韩欧美黄色免费网站| 涩涩黄片在线免费观看| 久久久久久久久久久久久国产 | 东京热日韩av影片| 欧美日本在线免费视频| 亚洲|久久久久久一二三区丝袜| 交换的一天中文字幕在线视频| 三级欧美日韩一区二区三区 | 日韩激情文学在线视频| 情趣视频在线观看91| 91精品一区一区三区| 亚洲av在线免费播放| 大片a免费观看在线视频观看| 蜜臀久久精品久久久久久av| 欧美精品激情在线不卡| 国产一区二区三区四区精| 亚洲精品色图1234| 成年男女免费视频网站无毒| 天天透天天舔天天操| 五月天天堂视频在线| 岳母的诱惑电影在线观看| 国产清纯一区二区在线观看| 999久久久人妻精品一区| 国产黄色主播网址大全在线播放| 一区二区三区资源视频| 亚洲av激情综合网| julia人妻av一区二区三区| 黄色av 在线观看| 亚洲国产综合久久精品| 亚洲精品乱码久久久久app| yy4080黄色片| 亚洲国产精品青青草| 亚洲免费午夜污福利| 人妻少妇视频系列视频在线| 人妻激情综合久久久久蜜桃| 最新国产午夜激情视频| 亚洲欧美不卡专业视频| 91精品国产人妻麻豆| 黄色av日韩在线观看| 4日日夜夜精品视频免费| 天天日 天天舔 天天射| 免费在线观看视频啪啪| 国产自拍偷拍在线精品| 中国特黄色性生活片| 亚洲成人三级黄色片| 在线 激情 亚洲 视频| 欧洲成熟女人色惰片| 久久久人妻免费视频| 天天色天天射天天日天天干| 国产做A爱免费视频在线观看| 亚洲精品久久久人妻| 免费中文三级在线观看| 看女人大BB群伦交| 亚洲国产日韩欧美一区二区三区,| 97cao在线视频| 日本欧美亚洲国产啊啊啊| 亚洲三级综合在线观看| 日本老熟老熟妇七十路| avjpm亚洲伊人久久| 久久久久性感美女偷拍视频| 大奶熟妇激情操逼逼| 大乳人妻一区二区三区| 久久久西西gogo日本美女人体| 18福利视频在线观看| 精久久久久久久久久久久 | 国产精品中文字幕丝袜| 国内精品一区二区2021在线| 国产精品久久人人添| 91精品资源在线观看| 99精品久久99久久久久一| 亚洲免费午夜污福利| 亚洲乱码国产乱码精品精视频 | aa福利影视在线观看| 国产人妻777人伦精品hd超碰| 中文字幕日韩人妻在线三区| 国产资源网站在线播放| 4438x亚洲最大的成人| 人妻色综合aaaaaa网| 美女福利网站在线播放| 天天干天天色综合久久| 国产91黑丝小视频在线观看| 青青青青午夜手机国产视频| 核xp工厂精品久久亚洲| 免费高清av一区二区| alisontyler和黑人| 2019年中文字幕在线播放视频| 亚洲自拍偷拍一区二区中文字幕| 亚av一二三在线观看| 91精品国产成人久久久久久| 中文字幕日韩首页欧美在线激情| 99re这里是国产精品首页 | 新亚洲天堂男子av| 日本老熟妇av老熟妇| 欧美久久蜜臀蜜桃资源吧| 日日躁夜夜躁狠狠操| 97超碰人人爽人人做| 宅男噜噜噜66国产在线观看| 可以免费观看日韩av| 免费在线观看视频啪啪| 国产精品福利久久久久| 69久久夜色精品国产69乱电影| 午夜夫妻性生活视频| 天天天天天天天天干夜夜| 国产经典精品欧美日韩| 人妻少妇的va视频| 我爱搞在线观看视频| 日本一本午夜在线播放| avtt中文字幕手机版| 亚洲国产精品自拍偷拍视频在线| 蜜臀久久精品久久久久久av| 亚洲韩精品一区二区三区| 欧美精品一区二区三区观看| 天天干夜夜撸天天操| 美国伦理片午夜理论片| —区二区三区女厕偷拍| 国产精品蝌蚪自拍视频| 久久国产精品久精国产爱| 不卡一区二区视频在线| 久久国产半精品99精品国产| 亚洲 自拍 激情 另类| 亚洲熟女乱色一区二区三区视频 | 69av精品国产探花| 久久人妻人人草人人爽| ysl蜜桃色7425| 黑人和日本人av一区二区| 亚洲成人 国产精品| 亚洲国产中文字幕在线看| 黑人3p日本女优中出| 91进入蜜桃臀在线播放| 91中文字幕视频网站| 青青草一个释放的网站| 亚洲在线免费观看18| 午夜亚洲国产精品中字| 天天摸天天舔天天操天天日| 午夜精品视频免费观看| 午夜五十路久久福利| 日本黄页在线观看视频| 国产高清视频www夜色资源| 美女欧美视频在线观看免费| 港台美女明星av天堂| 不卡视频在线 欧美日韩| 久久亚洲国产成人精品麻豆| 色网站在线观看免费| 4日日夜夜精品视频免费| 欧美成人一二三在线网| 日本一区二区三区区别| 天堂网免费在线电影| 99在线视频精品观看高| 伊人网在线欧美日韩在线| 精品美女洗澡一区二区| 一区二区三区午夜福利在线| 日本高清在线观看不卡视频| 自拍偷拍亚洲综合第一页| 河北全程露脸对白自拍| 午夜一区二区三区视频在线观看| 久久久久性感美女偷拍视频| 裸露视频免费在线观看| 伊人情人成综合视频| 亚洲综合色一区二区三区| 精品国产人伦一区二区三区| 熟女阿高潮合集一区二区| 99在线视频精品观看高| 天天躁狠狠躁狠狠躁性色| 91porny九色视频偷拍| 污网址在线观看视频| aa福利影视在线观看| 欧美在线观看视频欧美| 最新久久这里只有精品| 制服丝袜中文字幕熟女人妻| 青青免费观看视频| jizzjizz国产精品传媒| 熟女国内精品一区二区三区| 中文字幕麻绳捆绑的人妻| 亚洲美女露隐私av一区二区精品| 最近在线中文字幕免费| 欧美日本国产一区二区| 最新日韩中文字幕啪啪啪| 国产精品igao为爱寻找激情| 色老头一区二区三区四区五区| 中文字幕 首页 人妻| 一区二区三区五区六区| 中文字幕人妻精品精品| 最新国产午夜激情视频| 国产女人18毛片水真多精选| 日本丰满熟妇浓密多毛| 亚洲欧美小说中文字幕| 高潮喷水在线视频观看| 最新中文字幕久久久久| 综合久久伊人久久88| 中文字幕欧美一区二区视频| 一区二区三区四区视频精品免费| 在线免费观看视频18| 黑川堇人妻88av| 亚洲综合首页综合在线观看| 得得爱在线视频观看| 免费在线观看亚洲福利| 国际日韩日韩日韩日韩日韩| 精品久久久久久久久久久久久| 亚洲va999天堂va| 亚洲综合第一区二区| 91大神在线免费观看视频| 黑人大吊大战亚洲女人。| 果冻麻豆一区二区三区| 久久人人爽人人爽人人av东京热 | 亚洲制服丝袜在线看| 久久久久久久久久久久久国产| 岳母的诱惑电影在线观看| 小妹妹爱大棒棒免费观看视频 | 中文字幕熟女人妻一区| 国产毛片特级Av片| 91美女在线观看视频| 可以直接看av网站| 视频免费在线观看网站| 日韩人妻中文字幕二区 | 开心五月综合激情婷婷| 国产伦理二区三区在干嘛呢| 强乱人妻中文字幕日本| 偷拍熟女大胆免费视频| 18在线观看免费观看| 亚洲 自拍 激情 另类| 国产资源网站在线播放| 亚洲乱熟女一区二区三区山| 久久免费视频ww一区| 高潮喷水一区二区三区| 在宿舍强奷两个清纯校花| 亚洲熟女在线免费观看| 2020精品视频在线| 久久久视频在线播放| 最新中文字幕久久久久| 最新免费在线观看污视频| avgo成人短视频| 国产黄色主播网址大全在线播放| 亚洲熟妇丰满多毛xxxx网站| 日本香港韩国三级黄色| 91精品国产人妻麻豆| av在线播放观看h| 大乳人妻一区二区三区| 99精品久久一区二区| 亚洲码av一区二区三区| 人妻中文字幕亚洲在线| 97成人老师在线视频| 男生和女生羞羞91在线看| 在线中文字幕人妻av| 日韩av电影中文在线免费观看| 免费看超污视频在线观看| 午夜亚洲国产精品中字| 日韩三级精品电影久久久久| 69国产在线视频网站| 久久精品国产亚洲av清纯| 中文在线字幕免费观看日韩视频| 99热99这里免费的精品| jandara在线观看| 日韩黄色在线观看网站上| 一区二区三区五区六区| 啪啪啪网站免费在线看| 亚洲国产综合久久精品| iga肾三级算严重吗| 松本菜奈实最新av在线| 久久人人爽人人爽人人av东京热| 亚洲综合在线视频在线播放| 老熟女 露脸 嗷嗷叫| 国产高清在线观看av| 欧美一级特黄大片做受99| 青娱乐这里只有精品| 国产精品美女免费视频观看| 操死你美女在线视频| 国产精品剧情在线亚洲| 亚洲成人自拍av在线| 日本一区二区高清av中文| 外国美女舔男人坤坤| 中文字幕一区二区人妻视频| 亚洲第一页欧美第一页| 日本男女免费福利视频| 亚洲av中文免费在线| 国产黄色主播网址大全在线播放| 亚洲中文字幕无线乱码人妻精品| 久久99久久99久久97的人 | 国产福利小视频在线观看网站| 91超碰国产在线观看| 久久久亚洲综合国产精品| 桃色成人开心激情网| 免费看一级高潮喷水片| 国产免费久久精品99re丫丫 | 中文字幕精品人妻久久久久| 欧洲亚洲一区二区三区四区| 久久99热精品免费观看视| 久久精品四虎夜夜拍拍拍| 人妻少妇视频系列视频在线| 亚洲AV无码久久精品国产一区老| 国产精品亚洲精品亚洲| xxnxx国产美女| 久久午夜免费鲁丝片| 久久sm人妻中出精品一区二区| 中文字幕av人妻一区二区三区| 免费看超污视频在线观看| 又爽又粗又猛又色又黄视频| 插鸡视频免费网站在线播放 | 成人资源中文在线观看| 国产精品无码无卡免费观| 天堂av国产av伦理av| 中文字幕在线观看亚洲情色| 国产激情免费在线视频| 亚洲中文字幕在线av| 蜜桃tv一区二区三区| av福利免费体验观看| 欧美日本在线免费视频| 欧美极品少妇高潮喷水| 黑人侵犯人妻森泽佳奈| 欧美日本在线免费视频| 欧美亚洲国产一区二区| av 一区二区三区 熟女| 亚洲蜜桃久久久久久| 久久午夜免费鲁丝片| 在线人成视频免费观看尤物| 日韩av电影中文在线免费观看| 国产视频1区2区3区| 国产免费久久精品99re丫丫| 精品一区二区三区喷水内射高潮| 天天日天天玩天天摸| 川上优所有中文字幕在线| 激情九月天在线视频| 国产av啊啊啊啊啊啊啊| 久久久视频在线播放| 国产精品内射婷婷一级| 绿巨人浩克在线视频观看| 亚洲激情噜噜噜久久久| 久久国产精品久精国产爱| 男人资源站中文字幕| 97超碰人人爽人人做| 久久人人爽人人爽人人av东京热 | 亚洲欧美韩国日本一区二区| 精品欧美乱码久久久| 正在播放麻豆精品一区二区| 国产精品网站亚洲发布| 最近在线中文字幕免费| 中文字幕在线观看亚洲情色| 最新日韩中文字幕啪啪啪| 北野中文字幕一区二区| 人妻激情偷乱一区二区三区av| 国产自拍偷拍视频在线免费观看 | 国产在线小视频一区二区| 欧美成人少妇人妻精品| 天天操,天天射,天天爽| 日本人妻少妇xxxxxxx| 鸡巴在里面福利视频在线观看| 欧美区一区二区三视频| 啪啪啪网站免费看视频| 伊人久久综合国产精品| 欧洲精品在线免费观看| 天堂av国产av伦理av| 欧美日韩高清片在线观看| 操烂你的骚逼天天欧美| 午夜精品久久久久久久精品乱码| 77亚洲视频在线观看| 大成色亚洲一二三区| 4日日夜夜精品视频免费| 色丁香久久激情综合网| 丝袜美女诱惑佐佐三上| 亚洲美女色www色| 亚洲黄色免费在线观看网站| 国产天堂av不卡网| 天天色 天天操 天天好逼| 欧美男男在线观看视频网站| 成人精品动漫一区二区| 免费中文字幕a级激情| 大鸡扒操大逼大片免费关看| 在线视频自拍第三页| 男女啪啪啪啪91av日韩| 国产激情一区二区视频| 国内销魂老女人老泬| 丰满少妇人妻一区二区三区蜜桃| 一级做性色a爱片久久片| 68福利精品在线视频| 国产原创一区二区三区在线播放| 国产自拍偷拍视频在线免费观看| 久久综合狠狠综合久久综| 欧美激情视频第一页| 开心激情五月天作爱片| 美女网站福利在线观看| 日本美女爱爱视频网站| 亚洲av三级电影在线观看| 亚洲乱熟女一区二区三区影片| 视频自拍偷拍视频自拍| 4日日夜夜精品视频免费| 一区二区三区午夜福利在线| 亚洲AV无码一二三四区在线播放| 亚洲|久久久久久一二三区丝袜| 午夜五十路久久福利| 超碰在线pro中文字幕| 有码一区二区三区四区五区| 国产伦理二区三区在干嘛呢| 奇米网首页神马久久| 不卡一二三区别视频| 18岁禁一二三区免费体验| 天天弄天天草天天日天天| 欧美日韩久久丝袜在线| 欧美在线视频不卡一区| av福利免费体验观看| 日韩国产欧美久久一区| 国产人妻777人伦精品hd超碰| 亚洲人妻系列在线视频| 日本韩国欧美在线视频| 国产天堂av不卡网| 成人十欧美亚洲综合在线| 亚洲第一区av中文字幕| 精品美女洗澡一区二区| 手机看片1024精品国产| 亚洲国产精品自产拍在线观看 | 大屁股熟女一区二区视频| 伊人情人成综合视频| 欧美激情视频第一页| 亚洲综合首页综合在线观看 | 熟女人妻精品视频一区| 夜色福利视频免费观看| 91精品视频在线观看视频|