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

Promise學(xué)習(xí)筆記(三):源碼core.js解析(上)

開發(fā) 前端
相比大家都看到這行函數(shù)了doResolve(fn, this);,這里也就是我們初始化一個(gè)Promise時(shí)會(huì)做的事了,我們?cè)诳催@個(gè)函數(shù)前,先理解下源碼中類似于工具函數(shù)一樣的函數(shù).

[[171859]]

源碼閱讀階段

先理解Promise根本吧,想快點(diǎn)理解的話可以直接跳到下個(gè)標(biāo)題.這部分根據(jù)理解將持續(xù)修改。

Promise(fn) 

  1. function noop() {} 
  2. /* 
  3. 空函數(shù),用于判斷傳入Promise構(gòu)造器的函數(shù)是否為空函數(shù),如果為空函數(shù)構(gòu)造一個(gè)promise對(duì)象并初始化狀態(tài)為pending,終值null,回調(diào)狀態(tài)0和隊(duì)列null
  4. */ 
  5. var LAST_ERROR = null;//記錄Promise內(nèi)部***的一次錯(cuò)誤 
  6. var IS_ERROR = {}; //空對(duì)象,標(biāo)識(shí)表示發(fā)生了錯(cuò)誤 
  7. module.exports = Promise; //暴露模塊接口為Promise 
  8. function Promise(fn) { 
  9.   if (typeof this !== 'object') { 
  10.     throw new TypeError('Promises must be constructed via new'); 
  11.   } 
  12.   if (typeof fn !== 'function') { 
  13.     throw new TypeError('Promise constructor\'s argument is not a function'); 
  14.   } 
  15.   this._deferredState = 0; 
  16.   this._state = 0; //promise狀態(tài) 
  17.   this._value = null; //resolve返回的結(jié)果 
  18.   this._deferreds = null
  19.   if (fn === noop) return
  20.   doResolve(fn, this); //處理函數(shù) 
  21. Promise._onHandle = null
  22. Promise._onReject = null
  23. Promise._noop = noop;  

原文中表示將帶有_前綴的變量在構(gòu)造的時(shí)候轉(zhuǎn)為(_隨機(jī)數(shù))的形式,來混淆和阻止它們被使用.接下來列出說明重要的變量。

  1. * _defferedState = 0 
  2. 表示_deferreds的類型,0時(shí)表示null,1時(shí)表示單個(gè)handler(后面講述),2表示多個(gè)deferreds(數(shù)組) 
  3. * _state = 0 
  4. promise狀態(tài),0為pending,1為fulfilled,2為rejected,3則為值已被傳遞給下個(gè)promise. 
  5. * _value = null 
  6. resolve返回的結(jié)果,也就是我們所說的終值/拒因 
  7. * _deferreds = null 
  8. 表示單個(gè)或多個(gè)handler(后面講述)  

doResolve(fn,this)

相比大家都看到這行函數(shù)了doResolve(fn, this);,這里也就是我們初始化一個(gè)Promise時(shí)會(huì)做的事了,我們?cè)诳催@個(gè)函數(shù)前,先理解下源碼中類似于工具函數(shù)一樣的函數(shù)。

  1. //獲取then方法,沒有then方法標(biāo)識(shí)錯(cuò)誤 
  2. function getThen(obj) { 
  3.   try { 
  4.     return obj.then
  5.   } catch (ex) { 
  6.     LAST_ERROR = ex; 
  7.     return IS_ERROR; 
  8.   } 
  9. //內(nèi)部捕獲錯(cuò)誤,單個(gè)參數(shù)函數(shù) 
  10. function tryCallOne(fn, a) { 
  11.   try { 
  12.     return fn(a); 
  13.   } catch (ex) { 
  14.     LAST_ERROR = ex; 
  15.     return IS_ERROR; 
  16.   } 
  17. //內(nèi)部捕獲錯(cuò)誤,兩個(gè)參數(shù)函數(shù) 
  18. function tryCallTwo(fn, a, b) { 
  19.   try { 
  20.     fn(a, b); 
  21.   } catch (ex) { 
  22.     LAST_ERROR = ex; 
  23.     return IS_ERROR; 
  24.   } 
  25.  

接下來我們直接跳到doResolve(fn,promise)處:

  1. function doResolve(fn, promise) {//傳入?yún)?shù)為一個(gè)函數(shù),一個(gè)promise對(duì)象 
  2.   var done = false; //保證了規(guī)范中提到的一次性 
  3.   var res = tryCallTwo(fn, function (value) {//看到了么,用于捕獲錯(cuò)誤. 
  4.     if (done) return; //這里不用說了,為了保證兩個(gè)函數(shù)中只有一個(gè)函數(shù)運(yùn)行且僅運(yùn)行一次 
  5.     done = true
  6.     resolve(promise, value);//后續(xù)再分析它 
  7.   }, function (reason) { 
  8.     if (done) return
  9.     done = true
  10.     reject(promise, reason);//后續(xù)再分析它 
  11.   }); 
  12.   if (!done && res === IS_ERROR) { 
  13.     done = true
  14.     reject(promise, LAST_ERROR);//后續(xù)再分析它 
  15.   } 
  16.  

這就是我們的doResolve函數(shù),可以看出,它只是個(gè)中間件,用于干什么的呢,就是解決傳入函數(shù)error問題并進(jìn)行reject的.重點(diǎn)是調(diào)用了我們很眼熟的兩個(gè)函數(shù),resolve()和reject()。

resolve() and reject()

在這個(gè)函數(shù)里我們找到了兩個(gè)新東西,resolve()和reject(),看名字就知道這兩個(gè)函數(shù)是什么啦,我們先看reject()吧!

  1. function reject(self, newValue) {//兩個(gè)參數(shù),從doResolve我們可以知道self是一個(gè)promise對(duì)象,而newValue就是拒因啦 
  2.   self._state = 2;//狀態(tài)變成rejected了 
  3.   self._value = newValue;//promise中結(jié)果變?yōu)榫芤?nbsp;
  4.   if (Promise._onReject) {//在core.js中它為null,所以可能是用于別的功能.我們直接跳過 
  5.     Promise._onReject(self, newValue); 
  6.   } 
  7.   finale(self);//新的函數(shù)又出現(xiàn)了. 
  8.  

reject()函數(shù)傳入了promise對(duì)象和一個(gè)reason拒因,函數(shù)做的就是將promise的狀態(tài)變?yōu)閞ejected,并將promise的值進(jìn)行更改.然后調(diào)用finale()函數(shù)。

可以看到出現(xiàn)了新函數(shù)finale(),并且傳了已經(jīng)進(jìn)行完reject的promise對(duì)象給它.但是我們還是先看resolve()吧!

  1. function resolve(self, newValue) { 
  2. //這里寫的其實(shí)就是按照規(guī)范處理的流程 
  3.   /* Promise Resolution Procedure: https://github.com/promises-aplus/promises-spec#the-promise-resolution-procedure */ 
  4.   if (newValue === self) {//傳入值等于自己就拋出錯(cuò)誤 
  5.     return reject( 
  6.       self, 
  7.       new TypeError('A promise cannot be resolved with itself.'
  8.     ); 
  9.   } 
  10.   if (//值為對(duì)象或函數(shù) 
  11.     newValue && 
  12.     (typeof newValue === 'object' || typeof newValue === 'function'
  13.   ) { 
  14.     var then = getThen(newValue);//獲取值中的then函數(shù) 
  15.     if (then === IS_ERROR) {//不存在then,reject去 
  16.       return reject(self, LAST_ERROR); 
  17.     } 
  18.     if (//存在并且原來值它是一個(gè)promise對(duì)象 
  19.       then === self.then && 
  20.       newValue instanceof Promise 
  21.     ) {//同步兩個(gè)promise,將傳入的promise狀態(tài)變?yōu)橐褌鬟f并把newValue這個(gè)promise對(duì)象作為promise的值,然后finale并退出函數(shù). 
  22.       self._state = 3; 
  23.       self._value = newValue; 
  24.       finale(self); 
  25.       return
  26.     } else if (typeof then === 'function') {//如果獲取到then的值不為promise,但then是一個(gè)函數(shù)(thenable) 
  27.       doResolve(then.bind(newValue), self);//這里可以看看上個(gè)博文,對(duì)這個(gè)情況有說明,對(duì)終值自身進(jìn)行doResolve取得新的值作為新的終值. 
  28.       return
  29.     } 
  30.   } 
  31.   self._state = 1;//promise狀態(tài)為fulfilled 
  32.   self._value = newValue;//值傳遞 
  33.   finale(self);//finale了 
  34.  

在resolve()中,我們照樣是傳進(jìn)了一個(gè)promise對(duì)象和value(終值),函數(shù)內(nèi)部通過標(biāo)準(zhǔn)的判斷(詳細(xì)參考學(xué)習(xí)筆記(二):規(guī)范),進(jìn)行[[Resolve]]操作,***將promise對(duì)象狀態(tài)變更為fulfilled并改變其終值,調(diào)用finale。

finale()

我們可以進(jìn)行finale()的分析了,畢竟我們的核心函數(shù)都指向它呢!

  1. function finale(self) {//傳入了一個(gè)promise對(duì)象 
  2.   if (self._deferredState === 1) {//判斷deferreds是單個(gè) 
  3.     handle(self, self._deferreds);//傳入了promise對(duì)象和promise對(duì)象中的_deferreds 
  4.     self._deferreds = null;//讓deferreds為null 
  5.   } 
  6.   if (self._deferredState === 2) {//判斷deferreds是數(shù)組 
  7.     for (var i = 0; i < self._deferreds.length; i++) { 
  8.       handle(self, self._deferreds[i]);//傳入了promise對(duì)象和promise對(duì)象中的_deferreds數(shù)組的所有數(shù)據(jù) 
  9.     } 
  10.     self._deferreds = null;//讓deferreds為null 
  11.   } 
  12.  

很好,這下都是新的東西了,_deferredState這個(gè)就是判斷_deferreds是數(shù)組還是單個(gè)的情況,并對(duì)其中每一個(gè)deferred進(jìn)行handle調(diào)用.但是_defferreds又是什么呢,handle()這個(gè)函數(shù)又做了什么處理呢...

handle() 

  1. function handle(self, deferred) {//這個(gè)傳入?yún)?shù)是預(yù)想之中的 
  2.   while (self._state === 3) {//promise狀態(tài)為3的時(shí)候,也就是該promise已傳遞完畢的時(shí)候 
  3.     self = self._value;//重定位self為promise傳遞的值 
  4.   } 
  5.   if (Promise._onHandle) {//同樣不屬于本篇考慮范疇 
  6.     Promise._onHandle(self); 
  7.   } 
  8.   if (self._state === 0) {//promise狀態(tài)為pending時(shí) 
  9.     if (self._deferredState === 0) {//沒有deferreds時(shí) 
  10.       self._deferredState = 1;//deferreds變?yōu)閱蝹€(gè) 
  11.       self._deferreds = deferred;傳入deferreds入列 
  12.       return
  13.     } 
  14.     if (self._deferredState === 1) { 
  15.       self._deferredState = 2;//deferreds變?yōu)閿?shù)組 
  16.       self._deferreds = [self._deferreds, deferred];//傳入deferred進(jìn)入數(shù)組 
  17.       return
  18.     } 
  19.     self._deferreds.push(deferred);//已經(jīng)是數(shù)組了就直接push增加 
  20.     return
  21.   } 
  22.   handleResolved(self, deferred);//新東西,在state!==0時(shí)傳入promise和defered 
  23.  

可以看到其實(shí)這個(gè)函數(shù)在對(duì)_deferreds進(jìn)行添加,進(jìn)行著_deferreds的修改和寫入,與finale()所做的事情恰恰相反,但是詳細(xì)的處理卻還是在handleResolved()函數(shù)里面。

handleResolved() 

  1. function handleResolved(self, deferred) { 
  2.   asap(function() {//注意!asap是一個(gè)引入的模塊,意思就是as soon as possible,就是盡快執(zhí)行的意思,我們不需要考慮它做了什么. 
  3.     // promise狀態(tài)是fulfilled情況下cb為deferred中的Fulfilled函數(shù),不是的話則為onRejected函數(shù)... 
  4.     var cb = self._state === 1 ? deferred.onFulfilled : deferred.onRejected; 
  5.     if (cb === null) {//如果不存在對(duì)應(yīng)狀態(tài)的函數(shù) 
  6.       if (self._state === 1) {//當(dāng)前promise對(duì)象是否為fulfilled狀態(tài) 
  7.         resolve(deferred.promise, self._value);//傳入deferred中保存的promise和當(dāng)前promise的值進(jìn)行resolve 
  8.       } else { 
  9.         reject(deferred.promise, self._value);//與上類似,進(jìn)行reject 
  10.       } 
  11.       return
  12.     } 
  13.     var ret = tryCallOne(cb, self._value);//存在則嘗試執(zhí)行對(duì)應(yīng)函數(shù),返回執(zhí)行結(jié)果(與兩個(gè)參數(shù)的tryCall不同,這里返回了函數(shù)運(yùn)行結(jié)果) 
  14.     if (ret === IS_ERROR) {//有錯(cuò)誤,reject 
  15.       reject(deferred.promise, LAST_ERROR); 
  16.     } else {//沒錯(cuò)誤,對(duì)deferred.promise用函數(shù)返回值進(jìn)行resolve 
  17.       resolve(deferred.promise, ret); 
  18.     } 
  19.   }); 
  20.  

這里我們看到了deferred是一個(gè)保存了promise對(duì)象,onFulfilled函數(shù),onRejected函數(shù)的對(duì)象,相當(dāng)于一個(gè)保存現(xiàn)場(chǎng).其實(shí)這里就是我們即將在源碼core.js解析(下)寫到的handler對(duì)象了.但是這里我們暫且先不深究,知道就好了。

handleResolved()毫無疑問就是在進(jìn)行著promise的終值傳遞處理,對(duì)舊promise對(duì)象的狀態(tài)修改,并調(diào)用resolve和reject獲取到值/拒因向下一個(gè)Promise傳遞.對(duì)這里的詳細(xì)實(shí)例分析我們放到(下)來講。

構(gòu)造一個(gè)Promise時(shí)發(fā)生了啥?

從簡(jiǎn)單看起,我們構(gòu)造一個(gè)Promise對(duì)象的時(shí)候經(jīng)過了哪些函數(shù)。

先理一下思路。

  1. var A = Promise(function(resolve,reject){ 
  2.     resolve("ok"); 
  3. })  

這里面首先是先構(gòu)造了Promise對(duì)象,我們稱為A,在構(gòu)造階段執(zhí)行了如下代碼。

檢查略.... 

  1. A._deferredState = 0; 
  2. A._state = 0; 
  3. A._value = null
  4. A._deferreds = null 

檢查傳入?yún)?shù)不為空.... 

  1. doResolve(function(resolve,reject){ 
  2.     resolve("ok"); 
  3. },this); 

 然后我們跳到了doResolve()函數(shù)處,傳入為fn,promise 

  1. res = tryCallTwo(fn,function(value){resolve(promise, value);},function(reason){reject(promise, reason);}); 
  2. 出錯(cuò)就reject(promise,LAST_ERROR) 

出錯(cuò)就reject(promise,LAST_ERROR)

我們又根據(jù)我們的輸入跳轉(zhuǎn)到了resolve(promise,value)啦,這里理一下我們的函數(shù),promise就是A,value其實(shí)就是我們傳入的"ok"。

所以執(zhí)行的是promise內(nèi)部中的resolve(promise,"ok")

經(jīng)過一系列判斷(詳細(xì)可以看規(guī)范),我們的"ok"過五關(guān)斬六將直接執(zhí)行到這一步。

  1. self._state = 1;//A狀態(tài)變?yōu)閒ulfilled 
  2. self._value = newValue;//AA終值變?yōu)?span id="f5dfhpz" class="string">"ok"  

然后我們finale(self)啦,繼續(xù)跳到finale()函數(shù),傳入了A. 

  1. //在過程中我們的_deferredState始終為0呀,看了一下 
  2. A._deferredState = 0; 
  3. //已經(jīng)沒有什么好做的了...  

我們的構(gòu)造已經(jīng)結(jié)束了!這就是我們new 一個(gè)Promise時(shí)的過程,跟著思路走,其實(shí)加上reject也是同樣的路線而已。

(上)結(jié)語

(下)的話我打算重點(diǎn)寫剩余部分的then函數(shù)流程,并盡量用簡(jiǎn)單的語言來描述,希望自己能進(jìn)一步理解promise,發(fā)現(xiàn)有錯(cuò)漏能及時(shí)修訂。

責(zé)任編輯:龐桂玉 來源: segmentfault
相關(guān)推薦

2016-09-20 10:15:49

LaravelPHPContainer

2016-09-20 10:26:25

LaravelPHPMiddleware

2011-08-09 17:21:37

2009-06-17 14:21:39

core java

2020-07-29 17:35:08

Promise源碼前端

2010-07-27 15:42:18

AdobeFlex

2010-06-12 13:08:51

UML全稱

2016-12-15 09:44:31

框架Caffe源碼

2010-06-13 12:49:23

UML及建模

2021-11-08 15:04:47

鴻蒙HarmonyOS應(yīng)用

2011-09-01 14:14:00

jQuery Mobi

2010-06-28 15:41:17

UML圖類型

2010-06-28 18:44:54

UML對(duì)象圖

2011-07-18 15:20:28

Core Services 框架

2012-02-23 11:06:18

JavaPlay FramewPlay!

2022-01-10 15:30:11

鴻蒙HarmonyOS應(yīng)用

2010-06-28 18:36:06

UML協(xié)作圖

2011-08-31 15:59:10

LUAWeb 開發(fā)

2011-08-23 17:33:08

LuaMetatable

2010-07-12 14:32:29

UML對(duì)象關(guān)系
點(diǎn)贊
收藏

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

成人免费高清在线| 欧美国产先锋| 欧美群妇大交群的观看方式| 国产一区一区三区| 嫩草影院一区二区| 麻豆亚洲精品| 久久精品国产亚洲一区二区| 91传媒理伦片在线观看| 亚洲伦乱视频| 亚洲综合网站在线观看| 欧美男人的天堂| 国产精品久久久久久久久久久久久久久久久久| 狠狠88综合久久久久综合网| 亚洲老司机av| 波多野结衣中文字幕在线播放| 国产伦理精品| 亚洲精品国产a| 欧美大陆一区二区| 国产精品-色哟哟| 西西裸体人体做爰大胆久久久| 日韩在线观看免费av| 7788色淫网站小说| 国产色99精品9i| 欧洲国内综合视频| 青青草成人免费在线视频| 日本在线免费| 国产亚洲一区字幕| 久久国产精品亚洲va麻豆| 国产视频手机在线| 男女性色大片免费观看一区二区| 午夜精品蜜臀一区二区三区免费 | 日韩综合在线观看| 欧美91福利在线观看| 亚洲午夜精品视频| 加勒比精品视频| 影音先锋欧美激情| 欧美喷潮久久久xxxxx| 国产精品动漫网站| 九九精品调教| 亚洲人午夜精品天堂一二香蕉| 日本成人黄色| 欧美色图另类| 99精品热视频| 国产视频99| 亚洲欧美高清视频| 国产成人精品免费一区二区| 国产在线精品自拍| 中文字幕在线播放av| 日韩在线卡一卡二| 国产va免费精品高清在线| 日本在线视频免费| 亚洲精品九九| 午夜剧场成人观在线视频免费观看| 国产日韩欧美在线观看视频| 天天做天天爱综合| 北条麻妃在线一区二区| 少妇高潮在线观看| 91久久夜色精品国产按摩| 在线不卡国产精品| 欧美巨胸大乳hitomi| 青青草91久久久久久久久| 亚洲午夜未删减在线观看| 国产精品毛片一区二区| 国产午夜一区| 中文亚洲视频在线| 男女男精品视频网站| 日韩在线理论| 欧美成人手机在线| 国产一级一级片| 亚洲区国产区| 日本sm极度另类视频| 波多野结衣二区三区| 日本不卡高清视频| 国产在线观看不卡| 性一交一乱一精一晶| 成人动漫一区二区| 牛人盗摄一区二区三区视频| 国产三级电影在线观看| 国产精品国产三级国产aⅴ原创| 中文字幕中文字幕一区三区| 欧美aaa免费| 丰满岳妇乱一区二区三区| 国产主播中文字幕| 国产精久久久| 亚洲国产成人久久| 免费黄色片网站| 欧美成人综合| 欧美在线中文字幕| 亚洲一区在线观| 成人午夜电影久久影院| 欧美视频观看一区| 美女写真理伦片在线看| 一区二区三区欧美日韩| 日韩人妻精品无码一区二区三区| av在线一区不卡| 欧美一区二区视频在线观看| aaaa黄色片| 手机在线电影一区| 久久久亚洲精品视频| 黄色网址中文字幕| 高清av一区二区| 日韩精品国内| 国产偷倩在线播放| 欧美三级一区二区| 天天躁日日躁狠狠躁av| 日本一区二区高清不卡| 欧美国产第一页| 探花国产精品一区二区| 成人一区二区三区| 亚洲午夜精品久久久久久浪潮| 黄色污污视频在线观看| 欧美午夜片在线看| 男人网站在线观看| 亚洲精彩视频| 国产精品丝袜白浆摸在线 | 欧洲美女精品免费观看视频| 亚洲护士老师的毛茸茸最新章节| 日本视频在线免费| 香蕉视频成人在线观看| 成人9ⅰ免费影视网站| se在线电影| 欧美性猛交丰臀xxxxx网站| 被黑人猛躁10次高潮视频| 欧美日韩国产高清电影| 97香蕉超级碰碰久久免费的优势| 国产毛片毛片毛片毛片| 欧美国产日产图区| 九色在线视频观看| 成人三级毛片| 成年人精品视频| 中文字幕在线观看视频一区| 久久久国产精品麻豆| 国产二区视频在线| 日韩高清二区| 久久99视频免费| 国产三级在线观看视频| 国产精品久久久久aaaa樱花 | 成人动漫中文字幕| av片在线免费| 91成人午夜| 欧美超级免费视 在线| 国产一区二区三区四区视频| 欧美激情一区二区三区蜜桃视频| 国产在线观看福利| 外国成人在线视频| 欧美亚洲视频在线看网址| 手机av免费在线观看| 亚洲成av人片在线观看无码| 亚洲欧洲国产视频| 国自产拍偷拍福利精品免费一 | 国产又黄又爽视频| 中文字幕亚洲在| 99日在线视频| 亚洲先锋影音| wwwxx欧美| 日本在线视频网址| 精品国产亚洲在线| 国产午夜精品一区二区理论影院| 成人福利电影精品一区二区在线观看| 无码粉嫩虎白一线天在线观看| 538任你躁精品视频网免费| 久久99精品视频一区97| 色欲av伊人久久大香线蕉影院| 午夜精品久久久久久久99樱桃| 色呦呦一区二区| 羞羞视频在线观看欧美| 日韩黄色影视| 白嫩亚洲一区二区三区| 九九热在线精品视频| 亚洲国产精品久久久久久久 | 中文字幕永久在线视频| 中文字幕一区二区三区色视频| 毛毛毛毛毛毛毛片123| 狠狠噜噜久久| 精品视频一区二区| 国产精品久久久久77777丨| 日韩中文av在线| www日本高清视频| 精品色蜜蜜精品视频在线观看| 亚洲精品成人无码| 激情图片小说一区| 男人的天堂狠狠干| 欧美日韩国产在线观看网站| 亚洲va欧美va在线观看| 免费成人在线电影| 中文字幕日韩高清| 亚洲精品一区二区三区新线路| 欧美日韩日本国产| 美国一级片在线观看| www.成人网.com| 天天爽人人爽夜夜爽| 欧美日韩91| 日韩精品资源| 操欧美女人视频| 国产精品久久久久免费a∨大胸 | 欧美一级精品片在线看| 亚洲综合中文字幕在线| 亚洲性受xxx喷奶水| 久久精品国产v日韩v亚洲| 手机看片福利在线| 欧美高清性hdvideosex| 天天爽夜夜爽夜夜爽精品| 国产精品久久久久三级| 午夜久久久久久久| 狠狠色狠狠色综合| 国产无套内射久久久国产| 亚洲一区欧美| 日韩欧美亚洲日产国| 1313精品午夜理伦电影| 国产日韩精品入口| 英国三级经典在线观看| 欧美大片va欧美在线播放| 国产在线免费观看| 亚洲精品在线免费播放| 国产精品福利电影| 欧美综合久久久| 国内免费精品视频| 亚洲精品视频免费看| 少妇一级黄色片| 91丨九色丨蝌蚪富婆spa| 久久精品一二三四| 免费观看成人鲁鲁鲁鲁鲁视频| 好吊妞无缓冲视频观看| 欧美精选在线| 在线观看免费91| 奇米影视亚洲| 亚洲精品视频一区二区三区| 亚洲三级网页| 久久99精品久久久久久久青青日本 | 国产成人精品影院| 日韩一级理论片| 久久久久久亚洲精品杨幂换脸| 超级碰在线观看| 国产精品x453.com| 亚洲欧洲精品一区| av一区二区在线播放| 免费亚洲一区二区| 怕怕欧美视频免费大全| 欧美日韩在线精品| 九九视频免费观看视频精品| 国产精品制服诱惑| 高清精品视频| 激情视频在线观看一区二区三区| 一区二区三区四区高清视频| 亚洲最大激情中文字幕| 精品国产亚洲一区二区在线观看| 国产欧美日韩高清| 欧美亚洲黄色| 91精品国产综合久久久久久久久| 日本午夜免费一区二区| 91精品在线播放| 视频一区日韩精品| 国产伦精品一区二区三区视频免费| 日韩视频一区二区三区四区| 91色琪琪电影亚洲精品久久| xxx性欧美| 高清视频欧美一级| caoporn-草棚在线视频最| 亚洲18私人小影院| 国产乱码午夜在线视频| 久久人人爽人人爽人人片av高请| 欧美调教sm| 欧美影院在线播放| 巨茎人妖videos另类| 国产精品欧美日韩久久| www.成人在线视频| 国产精品视频专区| 亚洲精品a区| 国产精品v欧美精品v日韩精品| av成人资源| 欧美一区二区三区四区在线观看地址| 你懂的一区二区三区| 欧美日韩国产免费一区二区三区 | 日韩国产欧美精品一区二区三区| 天天综合网在线观看| 日韩成人中文字幕在线观看| 91在线你懂的| 日韩区在线观看| 欧美自拍偷拍一区二区| 亚洲精品不卡在线| 在线激情免费视频| 久久综合电影一区| 中文字幕免费高清电视剧网站在线观看| 久久久久久久久久久成人| 国产高清中文字幕在线| 97国产精品视频| 欧美日韩va| 国产91aaa| 国产欧美日韩精品一区二区免费 | 天天天综合网| 日韩精品―中文字幕| 日韩不卡一区二区| 日本黄色一级网站| 久久久久久久综合| 国产日产精品一区二区三区的介绍| 亚洲精品国产一区二区三区四区在线| 天天操天天摸天天干| 欧美少妇bbb| 国内精品久久久久久久久久| 亚洲人成免费电影| 国产日产一区二区三区| 午夜精品久久17c| 电影中文字幕一区二区| 国产亚洲欧美一区二区三区| 国产尤物久久久| 日本中文字幕亚洲| 免费xxxx性欧美18vr| 四虎1515hh.com| 欧美国产一区在线| 精品少妇久久久| 欧美性三三影院| 三级视频在线播放| 久久中文精品视频| 久久男人av资源站| 亚洲综合在线播放| 精品一区电影| 无码人妻h动漫| 国产精品一区二区无线| 在线免费观看黄色小视频| 亚洲国产欧美在线| 亚洲一区二区三区网站| 亚洲精品有码在线| 国产福利电影在线播放| 91色精品视频在线| 精品国产一区二区三区小蝌蚪| 久久久久久久久久久99| 麻豆91在线观看| 99久久免费看精品国产一区| 中文字幕五月欧美| 欧产日产国产69| 日韩成人中文字幕在线观看| www在线观看播放免费视频日本| 国产成人精品电影久久久| 竹菊久久久久久久| 日韩欧美不卡在线| 国产精品中文字幕日韩精品| 欧美激情精品久久久久久免费| 在线免费观看日韩欧美| 亚洲人视频在线观看| 欧美激情在线狂野欧美精品| 国内欧美日韩| 在线免费观看成人| 日本vs亚洲vs韩国一区三区| 在线 丝袜 欧美 日韩 制服| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 国产一区二区三区在线观看免费| 国偷自产av一区二区三区麻豆| 亚洲精品中文在线| 亚洲视屏在线观看| 亚洲国产天堂久久国产91| 1区2区在线| 国产乱码一区| 先锋影音久久| 欧美色图亚洲激情| 欧美日韩国产丝袜美女| 亚洲欧美综合在线观看| 97成人超碰免| 国产调教一区二区三区| 国产真人无码作爱视频免费| 久久久99精品免费观看| 中国黄色一级视频| 在线看日韩欧美| 91麻豆精品国产综合久久久| 亚洲一区bb| 国产一区二区三区四| 日本三级理论片| 日韩国产精品一区| 国产夫妻在线播放| 亚洲精品成人自拍| 久久se精品一区二区| 九九九免费视频| 亚洲а∨天堂久久精品9966| 91探花在线观看| 日本视频一区在线观看| 奇米一区二区三区| 国产成人自拍网站| 日韩精品一区二区三区视频| 黄页在线观看免费| 日本免费高清一区二区| 美女久久久精品| 一区二区三区影视| 精品久久久久久久久久久久包黑料 | av毛片在线| 久久久com| 男女男精品视频网| 国产福利视频网站| 亚洲国产成人一区| 美女的胸无遮挡在线观看| 亚洲bbw性色大片| 国产九九视频一区二区三区| 国产午夜小视频| 色黄久久久久久| 91麻豆精品激情在线观看最新 | 蜜芽tv福利在线视频| 97人人做人人爱| 成人嫩草影院| 国产成人精品一区二区三区在线观看 | 韩国中文字幕2020精品| 成人黄在线观看| 黄色亚洲大片免费在线观看|