亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍

JavaScript Promise啟示錄
來源:易賢網(wǎng) 閱讀:1527 次 日期:2014-08-14 15:56:14
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript Promise啟示錄”,方便廣大網(wǎng)友查閱!

本篇,主要普及promise的用法。

一直以來,JavaScript處理異步都是以callback的方式,在前端開發(fā)領(lǐng)域callback機(jī)制幾乎深入人心。在設(shè)計(jì)API的時(shí)候,不管是瀏覽器廠商還是SDK開發(fā)商亦或是各種類庫的作者,基本上都已經(jīng)遵循著callback的套路。

近幾年隨著JavaScript開發(fā)模式的逐漸成熟,CommonJS規(guī)范順勢(shì)而生,其中就包括提出了Promise規(guī)范,Promise完全改變了js異步編程的寫法,讓異步編程變得十分的易于理解。

在callback的模型里邊,我們假設(shè)需要執(zhí)行一個(gè)異步隊(duì)列,代碼看起來可能像這樣:

view sourceprint?1 loadImg('a.jpg', function() {

2 loadImg('b.jpg', function() {

3 loadImg('c.jpg', function() {

4 console.log('all done!');

5 });

6 });

7 });

這也就是我們常說的回調(diào)金字塔,當(dāng)異步的任務(wù)很多的時(shí)候,維護(hù)大量的callback將是一場(chǎng)災(zāi)難。當(dāng)今Node.js大熱,好像很多團(tuán)隊(duì)都要用它來做點(diǎn)東西以沾沾“洋氣”,曾經(jīng)跟一個(gè)運(yùn)維的同學(xué)聊天,他們也是打算使用Node.js做一些事情,可是一想到j(luò)s的層層回調(diào)就望而卻步。

好,扯淡完畢,下面進(jìn)入正題。

Promise可能大家都不陌生,因?yàn)镻romise規(guī)范已經(jīng)出來好一段時(shí)間了,同時(shí)Promise也已經(jīng)納入了ES6,而且高版本的chrome、firefox瀏覽器都已經(jīng)原生實(shí)現(xiàn)了Promise,只不過和現(xiàn)如今流行的類Promise類庫相比少些API。

所謂Promise,字面上可以理解為“承諾”,就是說A調(diào)用B,B返回一個(gè)“承諾”給A,然后A就可以在寫計(jì)劃的時(shí)候這么寫:當(dāng)B返回結(jié)果給我的時(shí)候,A執(zhí)行方案S1,反之如果B因?yàn)槭裁丛驔]有給到A想要的結(jié)果,那么A執(zhí)行應(yīng)急方案S2,這樣一來,所有的潛在風(fēng)險(xiǎn)都在A的可控范圍之內(nèi)了。

上面這句話,翻譯成代碼類似:

view sourceprint?1 var resB = B();

2 var runA = function() {

3 resB.then(execS1, execS2);

4 };

5 runA();

只看上面這行代碼,好像看不出什么特別之處。但現(xiàn)實(shí)情況可能比這個(gè)復(fù)雜許多,A要完成一件事,可能要依賴不止B一個(gè)人的響應(yīng),可能需要同時(shí)向多個(gè)人詢問,當(dāng)收到所有的應(yīng)答之后再執(zhí)行下一步的方案。最終翻譯成代碼可能像這樣:

view sourceprint?01 var resB = B();

02 var resC = C();

03 ...

04

05 var runA = function() {

06 reqB

07 .then(resC, execS2)

08 .then(resD, execS3)

09 .then(resE, execS4)

10 ...

11 .then(execS1);

12 };

13

14 runA();

在這里,當(dāng)每一個(gè)被詢問者做出不符合預(yù)期的應(yīng)答時(shí)都用了不同的處理機(jī)制。事實(shí)上,Promise規(guī)范沒有要求這樣做,你甚至可以不做任何的處理(即不傳入then的第二個(gè)參數(shù))或者統(tǒng)一處理。

好了,下面我們來認(rèn)識(shí)下Promise/A+規(guī)范:

一個(gè)promise可能有三種狀態(tài):等待(pending)、已完成(fulfilled)、已拒絕(rejected)

一個(gè)promise的狀態(tài)只可能從“等待”轉(zhuǎn)到“完成”態(tài)或者“拒絕”態(tài),不能逆向轉(zhuǎn)換,同時(shí)“完成”態(tài)和“拒絕”態(tài)不能相互轉(zhuǎn)換

promise必須實(shí)現(xiàn)then方法(可以說,then就是promise的核心),而且then必須返回一個(gè)promise,同一個(gè)promise的then可以調(diào)用多次,并且回調(diào)的執(zhí)行順序跟它們被定義時(shí)的順序一致

then方法接受兩個(gè)參數(shù),第一個(gè)參數(shù)是成功時(shí)的回調(diào),在promise由“等待”態(tài)轉(zhuǎn)換到“完成”態(tài)時(shí)調(diào)用,另一個(gè)是失敗時(shí)的回調(diào),在promise由“等待”態(tài)轉(zhuǎn)換到“拒絕”態(tài)時(shí)調(diào)用。同時(shí),then可以接受另一個(gè)promise傳入,也接受一個(gè)“類then”的對(duì)象或方法,即thenable對(duì)象。

可以看到,Promise規(guī)范的內(nèi)容并不算多,大家可以試著自己實(shí)現(xiàn)以下Promise。

以下是筆者自己在參考許多類Promise庫之后簡單實(shí)現(xiàn)的一個(gè)Promise,代碼請(qǐng)移步promiseA。

簡單分析下思路:

構(gòu)造函數(shù)Promise接受一個(gè)函數(shù)resolver,可以理解為傳入一個(gè)異步任務(wù),resolver接受兩個(gè)參數(shù),一個(gè)是成功時(shí)的回調(diào),一個(gè)是失敗時(shí)的回調(diào),這兩參數(shù)和通過then傳入的參數(shù)是對(duì)等的。

其次是then的實(shí)現(xiàn),由于Promise要求then必須返回一個(gè)promise,所以在then調(diào)用的時(shí)候會(huì)新生成一個(gè)promise,掛在當(dāng)前promise的_next上,同一個(gè)promise多次調(diào)用都只會(huì)返回之前生成的_next。

由于then方法接受的兩個(gè)參數(shù)都是可選的,而且類型也沒限制,可以是函數(shù),也可以是一個(gè)具體的值,還可以是另一個(gè)promise。下面是then的具體實(shí)現(xiàn):

view sourceprint?01 Promise.prototype.then = function(resolve, reject) {

02 var next = this._next || (this._next = Promise());

03 var status = this.status;

04 var x;

05

06 if('pending' === status) {

07 isFn(resolve) && this._resolves.push(resolve);

08 isFn(reject) && this._rejects.push(reject);

09 return next;

10 }

11

12 if('resolved' === status) {

13 if(!isFn(resolve)) {

14 next.resolve(resolve);

15 } else {

16 try {

17 x = resolve(this.value);

18 resolveX(next, x);

19 } catch(e) {

20 this.reject(e);

21 }

22 }

23 return next;

24 }

25

26 if('rejected' === status) {

27 if(!isFn(reject)) {

28 next.reject(reject);

29 } else {

30 try {

31 x = reject(this.reason);

32 resolveX(next, x);

33 } catch(e) {

34 this.reject(e);

35 }

36 }

37 return next;

38 }

39 };

這里,then做了簡化,其他promise類庫的實(shí)現(xiàn)比這個(gè)要復(fù)雜得多,同時(shí)功能也更多,比如還有第三個(gè)參數(shù)——notify,表示promise當(dāng)前的進(jìn)度,這在設(shè)計(jì)文件上傳等時(shí)很有用。對(duì)then的各種參數(shù)的處理是最復(fù)雜的部分,有興趣的同學(xué)可以參看其他類Promise庫的實(shí)現(xiàn)。

在then的基礎(chǔ)上,應(yīng)該還需要至少兩個(gè)方法,分別是完成promise的狀態(tài)從pending到resolved或rejected的轉(zhuǎn)換,同時(shí)執(zhí)行相應(yīng)的回調(diào)隊(duì)列,即resolve()和reject()方法。

到此,一個(gè)簡單的promise就設(shè)計(jì)完成了,下面簡單實(shí)現(xiàn)下兩個(gè)promise化的函數(shù):

view sourceprint?01 function sleep(ms) {

02 return function(v) {

03 var p = Promise();

04

05 setTimeout(function() {

06 p.resolve(v);

07 }, ms);

08

09 return p;

10 };

11 };

12

13 function getImg(url) {

14 var p = Promise();

15 var img = new Image();

16

17 img.onload = function() {

18 p.resolve(this);

19 };

20

21 img.onerror = function(err) {

22 p.reject(err);

23 };

24

25 img.url = url;

26

27 return p;

28 };

由于Promise構(gòu)造函數(shù)接受一個(gè)異步任務(wù)作為參數(shù),所以getImg還可以這樣調(diào)用:

view sourceprint?01 function getImg(url) {

02 return Promise(function(resolve, reject) {

03 var img = new Image();

04

05 img.onload = function() {

06 resolve(this);

07 };

08

09 img.onerror = function(err) {

10 reject(err);

11 };

12

13 img.url = url;

14 });

15 };

接下來(見證奇跡的時(shí)刻),假設(shè)有一個(gè)BT的需求要這么實(shí)現(xiàn):異步獲取一個(gè)json配置,解析json數(shù)據(jù)拿到里邊的圖片,然后按順序隊(duì)列加載圖片,沒張圖片加載時(shí)給個(gè)loading效果

view sourceprint?01 function addImg(img) {

02 $('#list').find('> li:last-child').html('').append(img);

03 };

04

05 function prepend() {

06 $('<li>')

07 .html('loading...')

08 .appendTo($('#list'));

09 };

10

11 function run() {

12 $('#done').hide();

13 getData('map.json')

14 .then(function(data) {

15 $('h4').html(data.name);

16

17 return data.list.reduce(function(promise, item) {

18 return promise

19 .then(prepend)

20 .then(sleep(1000))

21 .then(function() {

22 return getImg(item.url);

23 })

24 .then(addImg);

25 }, Promise.resolve());

26 })

27 .then(sleep(300))

28 .then(function() {

29 $('#done').show();

30 });

31 };

32

33 $('#run').on('click', run);

這里的sleep只是為了看效果加的,可猛擊查看demo!當(dāng)然,Node.js的例子可查看這里。

在這里,Promise.resolve(v)靜態(tài)方法只是簡單返回一個(gè)以v為肯定結(jié)果的promise,v可不傳入,也可以是一個(gè)函數(shù)或者是一個(gè)包含then方法的對(duì)象或函數(shù)(即thenable)。

類似的靜態(tài)方法還有Promise.cast(promise),生成一個(gè)以promise為肯定結(jié)果的promise;

Promise.reject(reason),生成一個(gè)以reason為否定結(jié)果的promise。

我們實(shí)際的使用場(chǎng)景可能很復(fù)雜,往往需要多個(gè)異步的任務(wù)穿插執(zhí)行,并行或者串行同在。這時(shí)候,可以對(duì)Promise進(jìn)行各種擴(kuò)展,比如實(shí)現(xiàn)Promise.all(),接受promises隊(duì)列并等待他們完成再繼續(xù),再比如Promise.any(),promises隊(duì)列中有任何一個(gè)處于完成態(tài)時(shí)即觸發(fā)下一步操作。

標(biāo)準(zhǔn)的Promise

可參考html5rocks的這篇文章JavaScript Promises,目前高級(jí)瀏覽器如chrome、firefox都已經(jīng)內(nèi)置了Promise對(duì)象,提供更多的操作接口,比如Promise.all(),支持傳入一個(gè)promises數(shù)組,當(dāng)所有promises都完成時(shí)執(zhí)行then,還有就是更加友好強(qiáng)大的異常捕獲,應(yīng)對(duì)日常的異步編程,應(yīng)該足夠了。

第三方庫的Promise

現(xiàn)今流行的各大js庫,幾乎都不同程度的實(shí)現(xiàn)了Promise,如dojo,jQuery、Zepto、when.js、Q等,只是暴露出來的大都是Deferred對(duì)象,以jQuery(Zepto類似)為例,實(shí)現(xiàn)上面的getImg():

view sourceprint?01 function getImg(url) {

02 var def = $.Deferred();

03 var img = new Image();

04

05 img.onload = function() {

06 def.resolve(this);

07 };

08

09 img.onerror = function(err) {

10 def.reject(err);

11 };

12

13 img.src = url;

14

15 return def.promise();

16 };

當(dāng)然,jQuery中,很多的操作都返回的是Deferred或promise,如animate、ajax:

view sourceprint?01 // animate

02 $('.box')

03 .animate({'opacity': 0}, 1000)

04 .promise()

05 .then(function() {

06 console.log('done');

07 });

08

09 // ajax

10 $.ajax(options).then(success, fail);

11 $.ajax(options).done(success).fail(fail);

12

13 // ajax queue

14 $.when($.ajax(options1), $.ajax(options2))

15 .then(function() {

16 console.log('all done.');

17 }, function() {

18 console.error('There something wrong.');

19 });

jQuery還實(shí)現(xiàn)了done()和fail()方法,其實(shí)都是then方法的shortcut。

處理promises隊(duì)列,jQuery實(shí)現(xiàn)的是$.when()方法,用法和Promise.all()類似。

其他類庫,這里值得一提的是when.js,本身代碼不多,完整實(shí)現(xiàn)Promise,同時(shí)支持browser和Node.js,而且提供更加豐富的API,是個(gè)不錯(cuò)的選擇。這里限于篇幅,不再展開。

尾聲

我們看到,不管Promise實(shí)現(xiàn)怎么復(fù)雜,但是它的用法卻很簡單,組織的代碼很清晰,從此不用再受callback的折磨了。

最后,Promise是如此的優(yōu)雅!但Promise也只是解決了回調(diào)的深層嵌套的問題,真正簡化JavaScript異步編程的還是Generator,在Node.js端,建議考慮Generator。

更多信息請(qǐng)查看IT技術(shù)專欄

更多信息請(qǐng)查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript Promise啟示錄
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請(qǐng)考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺(tái) | 手機(jī)站點(diǎn)

版權(quán)所有:易賢網(wǎng)

亚洲免费不卡_在线视频精品_国产尤物精品_久久久久网址_久久精品91_欧美va天堂在线_狠狠入ady亚洲精品_亚洲午夜精品福利_国产精品草草_午夜精品久久99蜜桃的功能介绍
国产精品二区影院| 一区二区av| 亚洲高清毛片| 亚洲午夜电影| 中文在线一区| 午夜亚洲视频| 欧美日韩一区二区三区在线观看免| 欧美黄色一区二区| 精品1区2区| 国产精品女主播一区二区三区| 亚洲欧美成人综合| 亚洲欧美综合国产精品一区| 影音先锋亚洲电影| 国产精品一区在线观看| 久久综合激情| 国产日韩欧美| 国产精品va| 国产精品久久久久久久久久妞妞| 国产女优一区| 亚洲网站视频| 裸体一区二区| 99精品视频免费观看| 久久一二三区| 国产精品主播| 激情综合在线| 欧美凹凸一区二区三区视频| 亚洲人体一区| 午夜久久美女| 国产精品久久久久久久久久妞妞| 欧美另类视频| 久久国产高清| 一区二区动漫 | 久久一区二区三区av| 在线免费观看欧美| 欧美成人日本| 亚洲免费综合| 国产精品日韩高清| 在线欧美日韩| 国模大胆一区二区三区| 欧美一区成人| 女人色偷偷aa久久天堂| 久久高清免费观看| 亚洲视频二区| 最近看过的日韩成人| 国产精品www994| 午夜精品视频在线观看一区二区| 久久大逼视频| 久久伊人一区二区| 噜噜噜久久亚洲精品国产品小说| 国产伦精品一区二区三| 一区二区av| 99精品免费| 国产日韩一区二区三区| 99成人精品| 99综合视频| 一本色道久久综合亚洲精品高清| 99精品欧美一区二区三区| 日韩视频精品在线观看| 亚洲三级色网| 国产一区二区三区黄| 国产一级久久| 久久在线91| 欧美激情视频一区二区三区免费| 欧美精品91| 极品中文字幕一区| 在线亚洲激情| 麻豆亚洲精品| 黑人一区二区三区四区五区| 亚洲大胆av| 在线视频亚洲| 麻豆精品视频| 亚洲特色特黄| 国产精品美女久久久浪潮软件| 99香蕉国产精品偷在线观看 | 久热综合在线亚洲精品| 欧美在线国产| 影音先锋久久| 亚洲尤物在线| 欧美午夜不卡| 在线视频精品| 欧美不卡一区| 日韩午夜视频在线观看| 国产精品一区亚洲| 午夜精品剧场| 99热这里只有精品8| 麻豆精品传媒视频| 国产精品国产精品| 中文精品视频| 久久蜜桃资源一区二区老牛| 国产一区二区三区四区老人| 一区二区三区精品国产| 欧美91视频| 亚洲三级视频| 欧美久久九九| 香蕉国产精品偷在线观看不卡| 国产一区高清视频| 乱码第一页成人| 亚洲激情国产| 国产精品v欧美精品v日韩精品| 亚洲一区二区三区精品在线观看| 国产精品a级| 另类天堂av| 一区二区三区三区在线| 狠久久av成人天堂| 欧美在线日韩| 久久精品一区二区三区中文字幕| 激情视频一区二区三区| 欧美成人蜜桃| 老司机精品视频网站| 在线一区欧美| 日韩亚洲一区在线播放| 伊人久久亚洲热| 国产一区日韩欧美| 欧美精品国产一区| 久久亚洲精品伦理| 另类天堂av| 噜噜噜在线观看免费视频日韩| 国产精品美女久久久| 99日韩精品| 一区二区高清视频| 亚洲精品欧洲精品| 亚洲欧洲午夜| 亚洲三级色网| 一区二区黄色| 国产农村妇女精品一区二区| 亚洲一区亚洲| 久久精品女人天堂| 久久精品一区二区国产| 久久久久久9| 久久久久se| 欧美日韩亚洲在线| 永久域名在线精品| 亚洲人人精品| 国产精品久久777777毛茸茸| 亚洲欧美高清| 久久免费国产| 韩国一区二区三区在线观看| 影音先锋中文字幕一区二区| 99国产精品99久久久久久粉嫩| 国产欧美日本在线| 免费看的黄色欧美网站| 久久久水蜜桃| 激情综合久久| 亚洲一区自拍| 国产一区二区无遮挡| 亚洲黄色在线| 久久久久一区二区| 精品91久久久久| 国产亚洲在线| 欧美日韩天天操| 亚洲深爱激情| 国产精品va| 国产色综合网| 欧美视频官网| 亚洲在线日韩| 欧美日韩喷水| 国产一区二区高清视频| 久久一区二区三区超碰国产精品| 激情婷婷亚洲| 久久久噜噜噜| 亚洲国产一区二区三区在线播| 亚洲欧美日本国产专区一区| 激情成人综合| 欧美一区1区三区3区公司 | 在线成人亚洲| 亚洲综合三区| 亚洲欧洲一区| 欧美一区免费视频| 亚洲深爱激情| 欧美日韩午夜| 久久精品一本| 国产亚洲综合精品| 亚洲国产精品久久久久婷婷老年 | 国精品一区二区三区| 国产精品手机在线| 亚洲国产日韩欧美| 欧美另类综合| 六月丁香综合| 亚洲尤物影院| 国产一级精品aaaaa看| 在线观看一区| 在线观看亚洲| 国产一区清纯| 欧美日韩精品一本二本三本| 久久久蜜桃一区二区人| 国产精品一二| 一区二区精品| 亚洲精品精选| 黄色在线一区| 黄色工厂这里只有精品| 韩日欧美一区| 激情欧美亚洲| 亚洲大胆av| 亚洲国产日韩欧美| 91久久久一线二线三线品牌| 在线观看一区欧美| 亚洲精品123区| 在线精品亚洲一区二区| 亚洲大胆在线| 亚洲人成毛片在线播放女女| 亚洲美女黄色| 国产精品手机在线| 国产精品一区在线观看| 亚洲免费综合| 欧美一区二区三区另类| 欧美精品色网| 狠狠色噜噜狠狠色综合久 | 欧美jizzhd精品欧美巨大免费| 欧美中文字幕| 欧美高清视频一区| 在线观看成人av| 国产精品免费在线 | 欧美视频久久| 亚洲国产日韩欧美| 国产精品久久久对白| 国产精品普通话对白| 美女久久一区| 国产精品v日韩精品v欧美精品网站| 亚洲午夜久久久久久尤物| 亚洲另类自拍| 久久亚洲综合| 亚洲人体一区| 欧美福利精品| 日韩午夜av在线| 久久精品一二三区| 好吊色欧美一区二区三区四区 | 欧美日韩1区| 亚洲电影在线| 久久精品九九| 亚洲人体一区| 欧美一区不卡| 亚洲美女少妇无套啪啪呻吟| 美女视频一区免费观看| 在线精品一区| 女人香蕉久久**毛片精品| 亚洲激情二区| 久久综合九色| 中文一区二区| 黄色亚洲精品| 欧美一区1区三区3区公司| 伊人成人网在线看| 久久一区免费| 欧美一级一区| 亚洲精品一级| 国内揄拍国内精品久久| 蜜桃av综合| 国产精品日韩精品欧美精品| 在线日韩视频| 欧美另类专区| 久久婷婷国产综合尤物精品| 亚洲一区二区四区| 一区二区三区国产在线| 一区视频在线| 亚洲香蕉网站| 欧美午夜一区| 欧美三区视频| 欧美精品观看| 欧美精品1区| 久久久久久久久久久一区| 国产精品视频免费观看| 亚洲精品视频啊美女在线直播| 国内精品久久国产| 欧美体内she精视频在线观看| 媚黑女一区二区| 亚洲欧美日产图| 国产精品一区毛片| 亚洲综合国产激情另类一区| 国产精品久久久久久久久久直播| 日韩一区二区久久| 亚洲作爱视频| 99伊人成综合| 夜夜精品视频| 一区二区高清视频| 国产日韩久久| 国产亚洲一级| 麻豆精品传媒视频| 老牛影视一区二区三区| 欧美淫片网站| 国产精品国码视频| 亚洲国产精品一区| 一本色道久久| 久久福利一区| 欧美精品一卡| 精品成人免费| 国产一区二区你懂的| 国产伦精品一区二区三区四区免费| 亚洲影院在线| 欧美激情性爽国产精品17p| 国产精品分类| 中日韩男男gay无套| 亚洲综合国产激情另类一区| 欧美成ee人免费视频| 国产精品v欧美精品v日本精品动漫| 激情欧美丁香| 国产日韩一区欧美| 麻豆成人在线| 在线观看一区欧美| 亚洲一区三区电影在线观看| 欧美另类一区| 在线综合欧美| 欧美日韩精品免费观看视一区二区| 黄色成人91| 欧美亚洲网站| 一区二区视频在线观看| 国产精品日韩二区| 欧美私人啪啪vps| 免费国产自线拍一欧美视频| 欧美日韩在线高清| 国产精品视频免费一区| 合欧美一区二区三区| 亚洲一区三区视频在线观看| 亚洲网站在线| 久久香蕉精品| 国产三区精品| 在线视频国内自拍亚洲视频| 久久亚洲色图| 国产日韩欧美一区在线 | 亚洲精品影院| 欧美一区激情| 国产日韩一区二区三区在线| 国产精品九九| 欧美~级网站不卡| 亚洲在线观看| 99国产精品久久久久老师| 欧美日韩一区二区三区免费| 男女精品网站| 国产精品久久波多野结衣| 亚洲激情不卡| 黄色综合网站| 国内一区二区三区在线视频| 午夜精彩国产免费不卡不顿大片| 性高湖久久久久久久久| 99精品久久| 99国产成+人+综合+亚洲欧美| 黄色成人av网站| 欧美日本中文| 欧美午夜精品| 欧美日韩三区| 国产一区日韩欧美| 欧美色123| 黄色亚洲在线| 国产综合精品| 伊人久久大香线蕉综合热线 | 在线免费观看一区二区三区| 国产精品videossex久久发布| 欧美阿v一级看视频| 午夜精品亚洲| 欧美日韩另类综合| 欧美日本中文| 欧美日韩1区2区3区| 欧美日韩免费高清| 亚洲一级特黄| 一本一本a久久| 午夜在线精品偷拍| 久久综合给合久久狠狠色| 性色一区二区| 欧美国产综合| 黄色一区三区| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产伦精品一区二区三区视频黑人| 亚洲青涩在线| 国产精品一区二区a| 久久av在线| 国模吧视频一区| 一本一本久久a久久精品综合妖精| 99精品国产在热久久下载| 亚洲欧美日韩精品一区二区| 欧美国产另类| 99爱精品视频| 久久亚洲影院| 亚洲激情二区| 六月丁香综合| 在线观看一区欧美| 性伦欧美刺激片在线观看| 欧美日韩成人| 国产一区二区久久久| 欧美精品一线| 国产精品女主播一区二区三区| 久久国产高清| 狠狠综合久久| 免费视频久久| 亚洲网站啪啪| 久久久蜜桃一区二区人| 激情综合网址| 美女久久网站| 日韩视频不卡| 欧美日韩国产亚洲一区| 国产一区二区三区免费不卡| 欧美日韩国产三区| 国产精品一区二区a| 狠狠88综合久久久久综合网| 鲁大师影院一区二区三区| 亚洲国产电影| 欧美99在线视频观看| 一级成人国产| 亚洲一二区在线| 午夜精品免费| 免费日韩av片| 国产日韩欧美| 亚洲黄色毛片|