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

JavaScript 異步編程指南 — Give me a Promise

開發 前端
Promise 是一個對象用來表示異步操作的結果,我們沒有辦法同步的知道它的結果,但是這個結果可以用來表示未來值,將來的某個時間點我們可以拿到該值,它可能成功,也可能失敗,也會一直等待下去(這個請看下文 “無法取消的承諾”)。

[[403926]]

本文轉載自微信公眾號「五月君」,作者五月君。轉載本文請聯系五月君公眾號。

“Give me a promise, I will not go anywhere, just stand here and wait for you.”

“給我一個承諾,我哪里都不會去,就在原地等你。” 這句話形式 Promise 還挺有意思的,文中我會在提及!

隨著 ES6 標準的出現,給我們帶來了一個新的異步解決方案 Promise。目前絕大多數 JavaScript 新增的異步 API 無論是在瀏覽器端還是 Node.js 服務端都是基于 Promise 構建的,以前基于 Callback 形式的也有解決方案將其轉為 Promise。

看過筆者上一節對 “Promise 前世 Deferred 的講解”,對于本章學習相對會更輕松一些,開始前我們還是先了解下 Promise/A+ 規范,更好的理解下 Promise 的一些思想和規則。

了解下 Promise 是什么?

Promise 是一個對象用來表示異步操作的結果,我們沒有辦法同步的知道它的結果,但是這個結果可以用來表示未來值,將來的某個時間點我們可以拿到該值,它可能成功,也可能失敗,也會一直等待下去(這個請看下文 “無法取消的承諾”)。

在 Promise A+ 規范中有一些專業的術語,先了解下:

  • fulfill:Promise 在成功時的一個結果,表示解決,在很多的 Promise 實現中會使用 resolve 代替,這是一個意思,通常在 resolve 里我們接收程序的正確響應。
  • reject:Promise 在失敗時的一個結果,通常在 reject 里我們接收一個錯誤信息。
  • eventual value:代表終值,這是 Promise 被解決時傳遞給解決回調的值,例如 resolve(value) 這時 Promise 狀態就會結束進入 fulfill。
  • reason:拒因,指 Promise 在被拒絕時傳遞給拒絕回調的值,例如 reject(reason) 這時 Promise 狀態結束進入 reject。

這些概念在我們想要更深入的了解 Promise 是需要的,例如,我們實現一個自己的 Promise 最好也是按照這種規范去做,本節我們主要將 Promise 的基礎使用,后面也會在異步進階里去講 Promise 的實現原理,實現一個自己的 Promise 對象。

Promise 狀態流轉

一個 Promise 在被創建出來時是一個等待態,最后要么成功、要么失敗這個狀態是不能夠逆轉的:

  • 等待態(Pending)
  • 執行態(Fulfilled)
  • 拒絕態(Rejected)

這幾個狀態流轉就像一個狀態機,通過這個圖也可看到狀態只能從 Pending -> Fulfilled 或 Pending -> Rejected

將一個 Callback 改造為 Promise

目前有些 API 直接是基于 Promise 的形式,例如 Fetch API 從網絡獲取數據。

  1. fetch('http://example.com/movies.json'
  2.   .then(function(response) { 
  3.     // TODO 
  4.   }); 

舉一個 Node.js 的示例,例如 fs.readFile() 這個 API 默認是 callback 的形式,如果要轉為 Promise 也很方便。

  1. fs.readFile('xxx'function(err, result) { 
  2.   console.error('Error: ', err);  
  3.   console.log('Result: ', result); 
  4. }); 

方式一:new Promise 實現

new Promise() 是創建一個新的 Promise 對象,之后我們可以在里面使用 resolve、reject 返回結果信息。

  1. const readFile = filename => new Promise((resolve, reject) => { 
  2.  fs.readFile(filename, (err, file) => { 
  3.    if (err) { 
  4.      reject(err); 
  5.     } else { 
  6.      resolve(file); 
  7.     } 
  8.   }) 
  9. }); 
  10.  
  11. readFile('xxx'
  12.  .then(result => console.log(result)) 
  13.   .catch(err => console.log(err)); 

方式二:Node.js util.promisify 工具

Node.js util 模塊提供了很多工具函數。為了解決回調地獄問題,Nodejs v8.0.0 提供了 promisify 方法可以將 Callback 轉為 Promise 對象。筆者之前也曾寫過一篇解析 “Node.js 源碼解析 util.promisify 如何將 Callback 轉為 Promise”

  1. const { promisify } = require('util'); 
  2. const readFilePromisify = util.promisify(fs.readFile); // 轉為 Promise 
  3.  
  4. readFilePromisify('xxx'
  5.   .then(result => console.log(result)) 
  6.   .catch(err => console.log(err)); 

除此之外 Node.js fs 模塊的 fs.promises API 提供了一組備用的異步文件系統的方法,它們返回 Promise 對象而不是使用回調。API 可通過 require('fs').promises 或 require('fs/promises') 訪問。

  1. const fsPromises = require('fs/promises'); 
  2. fsPromises('xxx'
  3.   .then(result => console.log(result)) 
  4.   .catch(err => console.log(err)); 

Promise 錯誤管理

Promise 實例提供了兩種錯誤捕獲的方式:一是 Promise.then() 方法傳入第二個參數,另一種是 Promise 實例的 catch() 方法。

  • .then() 第二個回調參數捕獲錯誤具有就近的原則,不會影響后續 then 的進行。
  • Promise 拋錯具有冒泡機制,能夠不斷傳遞,可以使用 catch() 統一處理。
  1. const ajax = function(){ 
  2.   console.log('promise 開始執行'); 
  3.   return new Promise(function(resolve,reject){ 
  4.     setTimeout(function(){ 
  5.       reject(`There's a mistake`); 
  6.     },1000); 
  7.   }); 
  8.  
  9. ajax() 
  10.   .then(function(){ 
  11.     console.log('then1'); 
  12.     return Promise.resolve(); 
  13.   }, err => { 
  14.     console.log('then1里面捕獲的err: ', err); 
  15.   }) 
  16.   .then(function(){ 
  17.     console.log('then2'); 
  18.     return Promise.reject(`There's a then mistake`); 
  19.   }) 
  20.   .catch(err => { 
  21.     console.log('catch里面捕獲的err: ', err); 
  22.   }); 
  23.  
  24. // 輸出 
  25. // promise開始執行 
  26. // then1里面捕獲的err:  There's a mistake 
  27. // then2 
  28. // catch里面捕獲的err:  There's a then mistake 

Promise 幾個方法

Promise.all() 并行執行

Promise.all() 以數組的形式接收多個 Promise 實例,內部好比一個 for 循環執行傳入的多個 Promise 實例,當所有結果都成功之后返回結果,執行過程中一旦其中某個 Promise 實例發生 reject 就會觸發 Promise.all() 的 catch() 函數。以下示例,加載 3 張圖片,如果全部成功之后渲染結果到頁面中。

  1. function loadImg(src){ 
  2.   return new Promise((resolve,reject) => { 
  3.     let img = document.createElement('img'); 
  4.     img.src = src; 
  5.     img.onload = () => { 
  6.       resolve(img); 
  7.     } 
  8.     img.onerror = (err) => { 
  9.       reject(err) 
  10.     } 
  11.   }) 
  12. function showImgs(imgs){ 
  13.   imgs.forEach(function(img){ 
  14.     document.body.appendChild(img) 
  15.   }) 
  16. Promise.all([ 
  17.   loadImg('http://www.xxxxxx.com/uploads/1.jpg'), 
  18.   loadImg('http://www.xxxxxx.com/uploads/2.jpg'), 
  19.   loadImg('http://www.xxxxxx.com/uploads/3.jpg'
  20. ]).then(showImgs) 

在 Promise 鏈式調用中,任意時刻都只有一個任務執行,下一個任務要等待這個任務完成之后才能執行,如果現在我有兩個或以上的任務,之間沒有順序依賴關系,希望它們能夠并行執行,這樣可以提高效率,此時就可以選擇 Promise.all()。

Promise.race() 率先執行

Promise.race() 只要其中一個 Promise 實例率先發生改變,其它的將不在響應。好比短跑比賽,我只想知道第一是誰,當第一個人跨越終點線之后,我的目的就達到了。還是基于上面的示例,只要有一個圖片加載完成就直接添加到頁面。

  1. function showImgs(img){ 
  2.   let p = document.createElement('p'); 
  3.   p.appendChild(img); 
  4.   document.body.appendChild(p); 
  5.  
  6. Promise.race([ 
  7.   loadImg('http://www.xxxxxx.com/uploads/1.jpg'), 
  8.   loadImg('http://www.xxxxxx.com/uploads/2.jpg'), 
  9.   loadImg('http://www.xxxxxx.com/uploads/3.jpg'
  10. ]).then(showImgs) 

Promise.finally()

Promise 在執行后最終結果要么成功進入 then,要么失敗 進入 catch。也許某些時候我們需要一個總是能夠被調用的回調,以便做一些清理工作,ES7 新加入了 finally 也許是你不錯的選擇。

Promise.finally() 在 Node.js 10.3.0 版本之后支持。

  1. const p = Promise.resolve(); 
  2.  .then(onSuccess) 
  3.  .catch(onFailed) 
  4.  .finally(cleanup); 

Promise.any()

Promise.any() 接收一個數組作為參數,可傳入多個 Promise 實例,只要其中一個 Promise 變為 Fulfilled 狀態,就返回該 Promise 實例,只有全部 Promise 實例都變為 Rejected 拒絕態,Promise.any() 才會返回 Rejected。Promise.any() 在 Node.js 15.14.0 版本之后支持。

  1. Promise.any([ 
  2.   Promise.reject('FAILED'), 
  3.   Promise.resolve('SUCCESS1'), 
  4.   Promise.resolve('SUCCESS2'),  
  5. ]).then(result => { 
  6.   console.log(result); // SUCCESS1 
  7. }); 

Promise.allSettled()

Promise.allSettled() 與 Promise.all() 類似,不同的是 Promise.allSettled() 執行完成不會失敗,它會將所有的結果以數組的形式返回,我們可以拿到每個 Promise 實例的執行狀態和結果。

Promise.allSettled() 在 Node.js 12.10.0 版本之后支持。

  1. Promise.allSettled([ 
  2.   Promise.reject('FAILED'), 
  3.   Promise.resolve('SUCCESS1'), 
  4.   Promise.resolve('SUCCESS2'),  
  5. ]).then(results => { 
  6.   console.log(results); 
  7. }); 
  8.  
  9. // [ 
  10. //   { status: 'rejected', reason: 'FAILED' }, 
  11. //   { status: 'fulfilled', value: 'SUCCESS1' }, 
  12. //   { status: 'fulfilled', value: 'SUCCESS2' } 
  13. // ] 

無法取消的承諾

剛開始引用了一句話 “Give me a promise, I will not go anywhere, just stand here and wait for you.” 就好比一個小伙子對一個心儀的姑娘說:“給我一個承諾,我哪里都不會去,就在原地等你”。

好比我們的程序,創建了一個 Promise 對象 promise,并為其注冊了完成和拒絕的處理函數,因為一些原因,我們沒有給予它 resolve/reject,這個時候 promise 對象將會一直處于 Pending 等待狀態。我們也無法從外部取消。如果 then 后面還有業務需要處理,也將會一直等待下去,當我們自己去包裝一個 Promise 對象時要盡可能的避免這種情況發生。

  1. const promise = new Promise((resolve, reject) => { 
  2.   // 沒有 resolve 也沒有 reject 
  3. }); 
  4.  
  5. console.log(promise); // Promise {<pending>} 
  6. promise 
  7.   .then(() => { 
  8.     console.log('resolve'); 
  9.   }).catch(err => { 
  10.     console.log('reject');          
  11.   }); 

使用 Promise 改造 Callback 回調地獄示例

這是我們之前在講解 JavaScript 異步編程指南 Callback 一節寫的例子:

  1. fs.readdir('/path/xxxx', (err, files) => { 
  2.   if (err) { 
  3.     // TODO... 
  4.   } 
  5.   files.forEach((filename, index) => { 
  6.     fs.lstat(filename, (err, stats) => { 
  7.       if (err) { 
  8.         // TODO... 
  9.       } 
  10.       if (stats.isFile()) { 
  11.         fs.readFile(filename, (err, file) => { 
  12.           // TODO 
  13.         }) 
  14.       } 
  15.     }) 
  16.   }) 
  17. }); 

Node.js 的 fs 模塊為我們提供了 promises 對象,現在解決了深層次嵌套問題,這個問題還有更優雅的寫法,在之后的 Async/Await 章節我們會繼續介紹。

  1. const fs = require('fs').promises; 
  2. const path = require('path'); 
  3. const rootDir = '/path/xxxx'
  4. fs.readdir('/path/xxxx'
  5.  .then(files => { 
  6.   files.forEach(checkFileAndRead); 
  7.   }) 
  8.   .catch(err => { 
  9.     // TODO 
  10.   }); 
  11.  
  12. function checkFileAndRead(filename, index) { 
  13.   const file = path.resolve(rootDir, filename); 
  14.   return fs.lstat(file) 
  15.     .then(stats => { 
  16.       if (stats.isFile()) { 
  17.         return fs.readFile(file); 
  18.       } 
  19.     }) 
  20.     .then(chunk => { 
  21.       // TODO 
  22.     }) 
  23.     .catch(err => { 
  24.       // TODO 
  25.     }) 

總結

 

Promise 是很好的,它解決了 callback 形式的回調地獄、難以管理的錯誤處理問題, Promise 提供了一種鏈式的以線性的方式(.then().then().then()...)來管理我們的異步代碼,這種方式是可以的,解決了我們一些問題,但是并非完美,在 Async/Await 章節你會看到關于異步編程問題更好的解決方案,但是 Promise 是基礎,請掌握它。以下二維碼關注。轉載本文請聯系麒思妙想公眾號。

 

責任編輯:武曉燕 來源: 五月君
相關推薦

2019-06-11 18:06:32

智能

2017-05-11 20:20:59

JavascriptPromiseWeb

2020-10-15 13:29:57

javascript

2023-01-12 11:23:11

Promise異步編程

2021-06-28 08:10:59

JavaScript異步編程

2021-11-01 22:36:04

JavaScript

2015-04-22 10:50:18

JavascriptJavascript異

2014-05-23 10:12:20

Javascript異步編程

2017-07-13 12:12:19

前端JavaScript異步編程

2016-09-07 20:43:36

Javascript異步編程

2025-03-07 07:20:00

JavaScript異步編程Promise

2025-09-30 13:00:00

JavaScript異步編程開發

2017-01-12 14:55:50

JavaScript編程

2018-11-29 08:00:20

JavaScript異步Promise

2021-06-02 09:01:19

JavaScript 前端異步編程

2020-03-29 08:27:05

Promise異步編程前端

2011-11-11 15:47:22

JavaScript

2021-10-22 08:29:14

JavaScript事件循環

2021-06-15 07:10:14

JavaScript異步編程

2021-12-10 07:47:30

Javascript異步編程
點贊
收藏

51CTO技術棧公眾號

一级做a免费视频| 中文字幕av日韩精品| 亚洲免费在线观看av| 亚洲丝袜美腿一区| 欧美日韩成人综合天天影院| 久久av喷吹av高潮av| 手机看片一区二区| 激情五月婷婷综合| 久久久在线免费观看| 中文字幕丰满乱子伦无码专区| 国产91精品在线| 亚洲成人资源在线| 亚洲欧美成人一区| 亚洲欧美日韩成人在线| 激情久久久久久久久久久久久久久久| 欧美激情18p| 精品日韩在线视频| 国产一区二区三区亚洲| 欧美伦理视频网站| 国产男女在线观看| 宅男网站在线免费观看| 国产欧美一二三区| 国产在线精品二区| 国产av无码专区亚洲av| 日韩av不卡在线观看| 久久全国免费视频| 免费黄色国产视频| 精品国产一区二区三区香蕉沈先生| 欧美疯狂做受xxxx富婆| 欧美丰满熟妇xxxxx| 福利在线导航136| 亚洲色图视频免费播放| 日韩午夜视频在线观看| 污视频软件在线观看| 国产精品综合二区| 国产精品视频一区二区三区四| 欧美精品一区二区蜜桃| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 日韩在线欧美| 亚洲美女性生活视频| 国产51自产区| 影音先锋欧美激情| 日韩欧美一区二区视频| 伊人成人222| 91久久久久久白丝白浆欲热蜜臀| 一本久久综合亚洲鲁鲁五月天 | 国产在线拍揄自揄拍视频| 国产精品国产三级国产aⅴ中文| 久久综合九九| 日本在线视频1区| 99re在线精品| 精品国产乱码久久久久久蜜柚 | 久本草在线中文字幕亚洲| 日韩精品专区在线影院重磅| 岛国av免费在线| 成人午夜毛片| 欧美日本韩国一区| 午夜激情影院在线观看| 国产成人免费av一区二区午夜| 911精品产国品一二三产区| 中文字幕在线综合| 亚洲网站免费| 欧美一区二区久久久| 欧美体内she精高潮| 精品视频一区二区三区在线观看| 欧美一区二区三区思思人| 人人爽人人爽av| 精品国产鲁一鲁****| 欧美一级高清片在线观看| 少妇伦子伦精品无吗| 国产伦乱精品| 亚洲人成啪啪网站| 我不卡一区二区| 91影院成人| 欧美精品免费在线观看| 久久综合久久鬼| 制服诱惑一区二区| 国产精品久久视频| 国产三级小视频| 成人中文字幕电影| 久久伊人资源站| √新版天堂资源在线资源| 亚洲免费在线电影| 久色视频在线播放| 久久日本片精品aaaaa国产| 欧美高清dvd| 亚洲久久久久久| 成人高清av| 欧美黄色性视频| 一级久久久久久| 国产精品资源站在线| 久草精品电影| 欧美日韩在线资源| 亚洲高清一区二区三区| 免费av网址在线| 精品国产乱码久久久久久樱花| 亚洲激情在线视频| 香蕉久久久久久久| 亚洲高清自拍| 国产精品久久久久久久久久ktv | 精品国产百合女同互慰| 国产全是老熟女太爽了| 中文字幕一区二区三区乱码图片| 午夜精品久久久久久久99热| 中文字幕一区二区免费| 成人久久久精品乱码一区二区三区| 青青成人在线| av老司机免费在线| 欧美日韩在线电影| 久久久久麻豆v国产精华液好用吗| 欧美日韩一区二区三区视频播放| 欧美风情在线观看| 中文精品久久久久人妻不卡| 成人妖精视频yjsp地址| 正在播放亚洲| 亚洲欧美韩国| 精品国产露脸精彩对白| 呻吟揉丰满对白91乃国产区| 国产精品一卡| 国产一区二区三区四区hd| 麻豆传媒在线完整视频| 欧日韩精品视频| 给我看免费高清在线观看| 欧美va天堂在线| 国产精品自产拍在线观| 日本a一级在线免费播放| 亚洲精品福利视频网站| 少妇一级淫免费播放| 亚洲三级精品| 91精品国产免费久久久久久 | 不卡视频免费播放| 艳母动漫在线观看| 福利一区二区免费视频| 亚洲欧洲在线免费| 看片网址国产福利av中文字幕| 国产精品一区二区视频| 亚洲午夜精品久久久久久浪潮| 精品国产第一福利网站| 亚洲精品乱码久久久久久金桔影视 | 成人黄色激情网| 最新真实国产在线视频| 欧美系列在线观看| 少妇av片在线观看| 免费人成网站在线观看欧美高清| 女同一区二区| av日韩电影| 精品一区二区亚洲| 在线观看亚洲天堂| 久久欧美一区二区| aⅴ在线免费观看| 久久综合亚洲| 国产成人精品一区二区在线| 国产在线观看免费| 欧美综合视频在线观看| 在线观看亚洲大片短视频| 青青国产91久久久久久 | 成人在线免费观看| 欧美最新大片在线看| 国产探花视频在线| 麻豆精品精品国产自在97香蕉| 亚洲丰满在线| 91视频成人| 欧美第一页在线| 手机在线不卡av| 一本一道综合狠狠老| av手机在线播放| 久草这里只有精品视频| 精品国产一区二区三区在线| 亚洲一区二区三区日本久久九 | 韩日精品一区二区| 夜夜嗨av一区二区三区四区| 懂色av蜜臀av粉嫩av喷吹| 国产精品国产三级国产普通话99 | 欧洲精品在线视频| 国产综合在线观看| 在线不卡中文字幕| 久久免费精彩视频| 久久久国产精品麻豆| 97超碰人人爽| 亚洲国产一区二区三区高清| 久久国产精品亚洲va麻豆| 成人久久网站| 欧美精品videosex极品1| 亚洲 另类 春色 国产| 一本在线高清不卡dvd| 国产免费一区二区三区四区| 粉嫩av一区二区三区在线播放 | 粉嫩高潮美女一区二区三区| 日韩在线xxx| 亚洲不卡av不卡一区二区| 国产精品一区免费观看| 欧美日韩精品一区二区三区视频| 久久天堂电影网| 三级黄视频在线观看| 欧美精品aⅴ在线视频| 中文在线观看免费网站| 亚洲国产精品传媒在线观看| 女同性αv亚洲女同志| 日日摸夜夜添夜夜添精品视频| 国产日本欧美在线| 色老板在线视频一区二区| 成人日韩在线电影| 日韩欧美另类一区二区| 欧美老女人性生活| 成年人在线看| 日韩高清有码在线| www.蜜桃av.com| 色av一区二区| 久久网一区二区| 中文字幕第一区综合| 你懂的在线观看网站| 精品亚洲aⅴ乱码一区二区三区| 欧美日韩性生活片| 欧美精品一区二区三区久久久竹菊| 欧美日韩精品免费在线观看视频| 亚洲不卡在线| 成人精品视频在线| 欧美色片在线观看| 91大神在线播放精品| 污污在线观看| 久久精品亚洲热| 国产精品久久一区二区三区不卡 | 91手机在线播放| 亚洲精品555| 国产成人aa精品一区在线播放 | 国产精品色午夜在线观看| free性欧美16hd| 欧美乱大交xxxxx| 麻豆视频在线| 久久精品久久久久电影| 波多野结衣在线影院| 亚洲欧美制服丝袜| 天堂中文字幕在线| 亚洲国产精品专区久久| 亚洲国产精品视频在线| 欧美一区二区三区播放老司机| 中文字幕精品在线观看| 欧洲视频一区二区| 自拍偷拍色综合| 欧美性猛交xxxx乱大交退制版 | 免费在线观看h片| 国产精品护士白丝一区av| 日本性高潮视频| 欧美激情在线一区二区三区| 成人国产精品久久久网站| 91社区在线播放| 国产熟妇久久777777| 久久综合狠狠综合久久激情 | 成人无码一区二区三区| 日韩精品最新网址| 性中国xxx极品hd| 精品毛片乱码1区2区3区| 丰满人妻一区二区| 亚洲国产精品成人精品| 无码国产色欲xxxx视频| 精品偷拍一区二区三区在线看| 色视频免费在线观看| 亚洲图片在区色| 在线观看免费黄色| 久久精品亚洲热| 毛片在线网址| 91精品国产高清久久久久久久久| 亚洲女同志freevdieo| 国产91久久婷婷一区二区| 巨大黑人极品videos精品| 91精品视频在线| 成人av综合网| 久久riav| 日韩毛片视频| 日本高清视频免费在线观看| 在线欧美不卡| 激情视频综合网| 国产美女视频一区| 国产又粗又长又爽| 国产精品女上位| 久久精品波多野结衣| 欧美性生交xxxxx久久久| 中文字幕网址在线| 精品国产一区二区三区久久久蜜月 | 久久久久久久9999| 欧美日韩精品在线| 一区二区小视频| 欧美精品一区二区三区很污很色的 | 中文久久电影小说| 久久久久久久久一区| 爽成人777777婷婷| 久久手机在线视频| 石原莉奈在线亚洲三区| 伊人免费视频二| 91视频国产资源| 日本中文字幕免费在线观看| 欧美日韩午夜激情| 国产免费叼嘿网站免费| 日韩激情在线视频| 久久综合网导航| 情事1991在线| 老司机亚洲精品一区二区| 青青草成人网| 亚洲激情av| 手机精品视频在线| 久久天堂av综合合色蜜桃网| 人妻少妇精品一区二区三区| 欧美性69xxxx肥| 国产成人麻豆精品午夜在线| 亚洲人成电影网站| h片在线观看| 亚洲一区免费网站| av伊人久久| 国产日产欧美视频| 国产成人福利片| 美女福利视频网| 91精品福利视频| 天天色综合久久| 欧美高清自拍一区| 日韩在线电影| 日本在线高清视频一区| 亚洲激精日韩激精欧美精品| 樱花草www在线| 国产欧美日韩视频一区二区 | 男女在线观看视频| 91精品久久久久久久久久| 免费观看久久av| 国产精品久久..4399| 国产成人精品影视| 成人免费精品动漫网站| 欧美在线免费观看亚洲| 青梅竹马是消防员在线| 777精品视频| 精品一区二区男人吃奶| 欧美狂野激情性xxxx在线观| 国产一区二区不卡老阿姨| 污污视频网站在线免费观看| 欧美伊人久久久久久久久影院 | 国产香蕉久久精品综合网| 国产精品变态另类虐交| 欧美videos中文字幕| 97caopron在线视频| 91九色综合久久| 亚洲精品a级片| 福利视频999| 一区在线观看视频| 国产又粗又猛又黄| 日韩视频免费中文字幕| 精品福利在线| 在线成人性视频| 狠狠色丁香九九婷婷综合五月| 美国精品一区二区| 欧美精品三级日韩久久| 老司机精品影院| 91久久国产自产拍夜夜嗨| 欧美va天堂在线| 人妻激情偷乱频一区二区三区 | 日本在线xxx| 久久这里只有精品首页| 久久99国产综合精品免费| 亚洲黄在线观看| 成人在线爆射| 亚洲五月六月| 国产成人av一区二区三区在线| 久久精品美女视频| 日韩激情av在线播放| 国产超碰精品| 在线国产99| 国产成人精品亚洲午夜麻豆| 国产精品theporn动漫| 亚洲欧美日韩精品久久| 激情久久99| 欧美日韩激情四射| 91在线一区二区三区| 天堂网一区二区| 久久久精品一区二区| 巨人精品**| 青青青在线视频免费观看| 最新中文字幕一区二区三区| 精品人妻久久久久一区二区三区| 性欧美激情精品| 欧美色爱综合| 在线播放国产视频| 色视频成人在线观看免| 久草中文在线| 国内一区在线| 久久99久久久欧美国产| 日本污视频在线观看| 亚洲欧美日韩一区在线| 国产亚洲高清一区| 日本久久久精品视频| 亚洲视频免费看| 日本一级在线观看| 成人久久一区二区三区| 亚洲专区免费| 免费精品在线视频| 亚洲精品www| **国产精品| 国产日产欧美视频| 伊人一区二区三区| 成人综合影院| 精品一区二区不卡| 国产一区二区h| 中文字幕乱码一区二区| 欧美激情极品视频|