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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!

發(fā)布時(shí)間:2023/12/4 编程问答 65 豆豆
生活随笔 收集整理的這篇文章主要介紹了 解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱! 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

解決異步問(wèn)題——promise、async/await

  • 一、單線(xiàn)程和異步
    • 1、單線(xiàn)程是什么
    • 2、為什么需要異步
    • 3、使用異步的場(chǎng)景
    • 二、promise
    • 1、promise的三種狀態(tài)
    • 2、三種狀態(tài)的表現(xiàn)和變化
      • (1)狀態(tài)的變化
      • (2)狀態(tài)的表現(xiàn)
    • 3、then和catch對(duì)狀態(tài)的影響(重要)
    • 4、then和catch的鏈?zhǔn)秸{(diào)用(常考)
  • 三、async/await
    • 1、引例闡述
    • 2、async和await
    • 3、async/await和promise的關(guān)系
    • 4、異步的本質(zhì)
    • 5、場(chǎng)景題
      • (1)async/await語(yǔ)法
      • (2)async/await的順序問(wèn)題
  • 四、寫(xiě)在最后

我們平常在寫(xiě) js 中,經(jīng)常只管程序能跑就行,但很少去深究它的原理。更別說(shuō)還有一個(gè)同步和異步的問(wèn)題了。因此,程序往往有時(shí)候出現(xiàn)莫名其妙的卡死或者有時(shí)候執(zhí)行順序達(dá)不到我們想要的結(jié)果時(shí)自己都不知道往哪里找錯(cuò)。下面的這篇文章中,將講解同步和異步的問(wèn)題,以及如何解決異步問(wèn)題的promise、async/await方法。

在看本文之前,建議大家先對(duì) event loop 有一個(gè)了解。可以先看我的上一篇文章了解event loop以及微任務(wù)宏任務(wù)的相關(guān)知識(shí),這樣到后面看本文的 async/await 的時(shí)候會(huì)更友好一些。

下面開(kāi)始進(jìn)行本文的講解。

一、單線(xiàn)程和異步

1、單線(xiàn)程是什么

(1) JS 是單線(xiàn)程語(yǔ)言,只能同時(shí)做一件事情

  • 所謂單線(xiàn)程,就是只能同時(shí)做一件事情,多一件都不行,這就是單線(xiàn)程。

(2) 瀏覽器和 nodejs 已支持 JS 啟動(dòng)進(jìn)程,如 Web Worker

(3) JS 和 DOM 渲染共用同一個(gè)線(xiàn)程,因?yàn)?JS 可修改 DOM 結(jié)構(gòu)

  • JS 可以修改 DOM 結(jié)構(gòu),使得它們必須共用同一個(gè)線(xiàn)程,這間接算是一件迫不得已的事情。
  • 所以當(dāng) DOM 在渲染時(shí) JS 必須停止執(zhí)行,而 JS 執(zhí)行過(guò)程 DOM 渲染也必須停止。

2、為什么需要異步

當(dāng)程序遇到網(wǎng)絡(luò)請(qǐng)求或定時(shí)任務(wù)等問(wèn)題時(shí),這個(gè)時(shí)候會(huì)有一個(gè)等待時(shí)間。

假設(shè)一個(gè)定時(shí)器設(shè)置10s,如果放在同步任務(wù)里,同步任務(wù)會(huì)阻塞代碼執(zhí)行,我們會(huì)等待10s后才能看到我們想要的結(jié)果。1個(gè)定時(shí)器的等待時(shí)間可能還好,如果這個(gè)時(shí)候是100個(gè)定時(shí)器呢?我們總不能等待著1000s的時(shí)間就為了看到我們想要的結(jié)果吧,這幾乎不太現(xiàn)實(shí)。

那么這個(gè)時(shí)候就需要異步,通過(guò)異步來(lái)讓程序不阻塞代碼執(zhí)行,靈活執(zhí)行程序。

3、使用異步的場(chǎng)景

(1)異步的請(qǐng)求,如ajax圖片加載

//ajax console.log('start'); $.get('./data1.json', function (data1) {console.log(data1); }); console.log('end');

(2)定時(shí)任務(wù),如setTimeout、setInterval

//setTimeout console.log(100); setTimeout(fucntion(){console.log(200); }, 1000); console.log(300); //setInterval console.log(100); setInterval(fucntion(){console.log(200); }, 1000); console.log(300);

二、promise

早期我們?cè)诮鉀Q異步問(wèn)題的時(shí)候,基本上都是使用callback回調(diào)函數(shù)的形式 來(lái)調(diào)用的。形式如下:

//獲取第一份數(shù)據(jù) $.get(url1, (data1) => {console.log(data1);//獲取第二份數(shù)據(jù)$.get(url2, (data2) => {console.log(data2);//獲取第三份數(shù)據(jù)$.get(url3, (data3) => {console.log(data3);//還可以獲取更多數(shù)據(jù)});}); });

從上述代碼中可以看到,早期在調(diào)用數(shù)據(jù)的時(shí)候,都是一層套一層, callback 調(diào)用 callback ,仿佛深陷調(diào)用地獄一樣,數(shù)據(jù)也被調(diào)用的非常亂七八糟的。所以,因?yàn)?callback 對(duì)開(kāi)發(fā)如此不友好,也就有了后來(lái)的 promise 產(chǎn)生, promise 的出現(xiàn)解決了 callback hell 的問(wèn)題。

用一段代碼先來(lái)了解一下 Promise 。

function getData(url){return new Promise((resolve, reject) => {$.ajax({url,success(data){resolve(data);},error(err){reject(err);}});}); }const url1 = '/data1.json'; const url2 = '/data2.json'; const url3 = './data3.json'; getData(url1).then(data1 => {console.log(data1);return getData(url2); }).then(data2 => {console.log(data2);return getData(url3); }).then(data3 => {console.log(data3); }).catch(err => console.error(err));

大家可以看到,運(yùn)用了 promise 之后,代碼不再是一層套一層,而是通過(guò) .then 的方式來(lái)對(duì)數(shù)據(jù)進(jìn)行一個(gè)獲取,這在寫(xiě)法上就已經(jīng)美觀了不少。那 promise 究竟是什么呢?接下來(lái)開(kāi)始進(jìn)行講解。

1、promise的三種狀態(tài)

  • pending :等待狀態(tài),即在過(guò)程中,還沒(méi)有結(jié)果。比如正在網(wǎng)絡(luò)請(qǐng)求,或定時(shí)器沒(méi)有到時(shí)間。
  • fulfilled :滿(mǎn)足狀態(tài),即事件已經(jīng)解決了,并且成功了;當(dāng)我們主動(dòng)回調(diào)了 fulfilled 時(shí),就處于該狀態(tài),并且會(huì)回調(diào) then 函數(shù)。
  • rejected :拒絕狀態(tài),即事件已經(jīng)被拒絕了,也就是失敗了;當(dāng)我們主動(dòng)回調(diào)了 reject 時(shí),就處于該狀態(tài),并且會(huì)回調(diào) catch 函數(shù)。

總結(jié):

  • 只會(huì)出現(xiàn)pending → fulfilled,或者pending → rejected 狀態(tài),即要么成功要么失敗;
  • 不管是成功的狀態(tài)還是失敗的狀態(tài),結(jié)果都不可逆。

2、三種狀態(tài)的表現(xiàn)和變化

(1)狀態(tài)的變化

promise 主要有以上三種狀態(tài), pending 、 fulfilled 和 rejected 。當(dāng)返回一個(gè) pending 狀態(tài)的 promise 時(shí),不會(huì)觸發(fā) then 和 catch 。當(dāng)返回一個(gè) fulfilled 狀態(tài)時(shí),會(huì)觸發(fā) then 回調(diào)函數(shù)。當(dāng)返回一個(gè) rejected 狀態(tài)時(shí),會(huì)觸發(fā) catch 回調(diào)函數(shù)。那在這幾個(gè)狀態(tài)之間,他們是怎么變化的呢?

1)演示1

先來(lái)看一段代碼。

const p1 = new Promise((resolved, rejected) => {});console.log('p1', p1); //pending

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p1 函數(shù)里面沒(méi)有內(nèi)容可以執(zhí)行,所以一直在等待狀態(tài),因此是 pending 。

2)演示2

const p2 = new Promise((resolved, rejected) => {setTimeout(() => {resolved();}); });console.log('p2', p2); //pending 一開(kāi)始打印時(shí) setTimeout(() => console.log('p2-setTimeout', p2)); //fulfilled

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p2 一開(kāi)始打印的是 pending 狀態(tài),因?yàn)樗鼪](méi)有執(zhí)行到 setTimeout 里面。等到后續(xù)執(zhí)行 setTimeout 時(shí),才會(huì)觸發(fā)到 resolved 函數(shù),觸發(fā)后返回一個(gè) fulfilled 狀態(tài) promise 。

3)演示3

const p3 = new Promise((resolved, rejected) => {setTimeout(() => {rejected();}); });console.log('p3', p3); setTimeout(() => console.log('p3-setTimeout', p3)); //rejected

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p3 一開(kāi)始打印的是 pending 狀態(tài),因?yàn)樗鼪](méi)有執(zhí)行到 setTimeout 里面。等到后續(xù)執(zhí)行 setTimeout 時(shí),同樣地,會(huì)觸發(fā)到 rejected 函數(shù),觸發(fā)后返回一個(gè) rejected 狀態(tài)的 promise 。

看完 promise 狀態(tài)的變化后,相信大家對(duì) promise 的三種狀態(tài)分別在什么時(shí)候觸發(fā)會(huì)有一定的了解。那么我們接下來(lái)繼續(xù)看 promise 狀態(tài)的表現(xiàn)。

(2)狀態(tài)的表現(xiàn)

  • pending 狀態(tài),不會(huì)觸發(fā) then 和 catch 。
  • fulfilled 狀態(tài),會(huì)觸發(fā)后續(xù)的 then 回調(diào)函數(shù)。
  • rejected 狀態(tài),會(huì)觸發(fā)后續(xù)的 catch 回調(diào)函數(shù)。

我們來(lái)演示一下。

1)演示1

const p1 = Promise.resolve(100); //fulfilled console.log('p1', p1); p1.then(data => {console.log('data', data); }).catch(err => {console.error('err', err); });

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p1 調(diào)用 promise 中的 resolved 回調(diào)函數(shù),此時(shí)執(zhí)行時(shí), p1 屬于 fulfilled 狀態(tài), fulfilled 狀態(tài)下,只會(huì)觸發(fā) .then 回調(diào)函數(shù),不會(huì)觸發(fā) .catch ,所以最終打印出 data 100 。

2)演示2

const p2 = Promise.reject('404'); //rejected console.log('p2', p2); p2.then(data => {console.log('data2', data); }).catch(err => {console.log('err2', err); })

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p2 調(diào)用 promise 中的 reject 回調(diào)函數(shù),此時(shí)執(zhí)行時(shí), p1 屬于 reject 狀態(tài), reject 狀態(tài)下,只會(huì)觸發(fā) .catch 回調(diào)函數(shù),不會(huì)觸發(fā) .then ,所以最終打印出 err2 404 。

對(duì)三種狀態(tài)有了基礎(chǔ)了解之后,我們來(lái)深入了解 .then 和 .catch 對(duì)狀態(tài)的影響。

3、then和catch對(duì)狀態(tài)的影響(重要)

  • then 正常返回 fulfilled ,里面有報(bào)錯(cuò)則返回 rejected ;
  • catch 正常返回 fulfilled ,里面有報(bào)錯(cuò)則返回 rejected 。

我們先來(lái)看第一條規(guī)則: then 正常返回 fulfilled ,里面有報(bào)錯(cuò)則返回 rejected 。

1)演示1

const p1 = Promise.resolve().then(() => {return 100; }) console.log('p1', p1); //fulfilled狀態(tài),會(huì)觸發(fā)后續(xù)的.then回調(diào) p1.then(() => {console.log('123'); });

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p1 調(diào)用 promise 中的 resolve 回調(diào)函數(shù),此時(shí)執(zhí)行時(shí), p1 正常返回 fulfilled , 不報(bào)錯(cuò),所以最終打印出 123 。

2)演示2

const p2 = Promise.resolve().then(() => {throw new Error('then error'); }); console.log('p2', p2); //rejected狀態(tài),觸發(fā)后續(xù).catch回調(diào) p2.then(() => {console.log('456'); }).catch(err => {console.error('err404', err); });

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p2 調(diào)用 promise 中的 resolve 回調(diào)函數(shù),此時(shí)執(zhí)行時(shí), p2 在執(zhí)行過(guò)程中,拋出了一個(gè) Error ,所以,里面有報(bào)錯(cuò)則返回 rejected 狀態(tài) , 所以最終打印出 err404 Error: then error 的結(jié)果。

我們?cè)賮?lái)看第二條規(guī)則: catch 正常返回 fulfilled ,里面有報(bào)錯(cuò)則返回 rejected 。

1)演示1(需特別謹(jǐn)慎! !)

const p3 = Promise.reject('my error').catch(err => {console.error(err); }); console.log('p3', p3); //fulfilled狀態(tài),注意!觸發(fā)后續(xù).then回調(diào) p3.then(() => {console.log(100); });

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p3 調(diào)用 promise 中的 rejected 回調(diào)函數(shù),此時(shí)執(zhí)行時(shí), p3 在執(zhí)行過(guò)程中,正常返回了一個(gè) Error ,這個(gè)點(diǎn)需要特別謹(jǐn)慎!!這看起來(lái)似乎有點(diǎn)違背常理,但對(duì)于 promise 來(lái)說(shuō),不管時(shí)調(diào)用 resolved 還是 rejected ,只要是正常返回而沒(méi)有拋出異常,都是返回 fulfilled 狀態(tài)。所以,最終 p3 的狀態(tài)是 fulfilled 狀態(tài),且因?yàn)槭?fulfilled 狀態(tài),之后還可以繼續(xù)調(diào)用 .then 函數(shù)。

2)演示2

const p4 = Promise.reject('my error').catch(err => {throw new Error('catch err'); }); console.log('p4', p4); //rejected狀態(tài),觸發(fā).catch回調(diào)函數(shù) p4.then(() => {console.log(200); }).catch(() => {console.log('some err'); });

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

在這段代碼中, p4 依然調(diào)用 promise 中的 reject 回調(diào)函數(shù),此時(shí)執(zhí)行時(shí), p4 在執(zhí)行過(guò)程中,拋出了一個(gè) Error ,所以,里面有報(bào)錯(cuò)則返回 rejected 狀態(tài) , 此時(shí) p4 的狀態(tài)為 rejected ,之后觸發(fā)后續(xù)的 .catch 回調(diào)函數(shù)。所以最終打印出 some err 的結(jié)果。

4、then和catch的鏈?zhǔn)秸{(diào)用(常考)

學(xué)習(xí)完以上知識(shí)后,我們通過(guò)幾道題來(lái)再總結(jié)回顧一下。

第一題:

Promise.resolve().then(() => {console.log(1); }).catch(() => {console.log(2); }).then(() => {console.log(3); });

這道題打印的是 1 和 3 ,因?yàn)檎{(diào)用的是 promise 的 resolve 函數(shù),所以后續(xù)不會(huì)觸發(fā) .catch 函數(shù)。

第二題:

Promise.resolve().then(() => {console.log(1);throw new Error('error'); }).catch(() => {console.log(2); }).then(() => {console.log(3); });

這道題打印的是 1 和 2 ,雖然調(diào)用的是 promise 的 resolve 函數(shù),但是中間拋出了一個(gè)異常,所以此時(shí) promise 變?yōu)?rejected 狀態(tài),所以后續(xù)不會(huì)觸發(fā) .then 函數(shù)。

第三題:

Promise.resolve().then(() => {console.log(1);throw new Error('error'); }).catch(() => {console.log(2); }).catch(() => { //這里是catchconsole.log(3); });

這道題打印的是 1 和 2 和 3 ,跟第二題一樣,中間拋出了一個(gè)異常,所以此時(shí) promise 變?yōu)?rejected 狀態(tài),所以后續(xù)只觸發(fā) .catch 函數(shù)。

三、async/await

現(xiàn)代 js 的異步開(kāi)發(fā),基本上被 async 和 await 給承包和普及了。雖然說(shuō) promise 中的 .then 和 .catch 已經(jīng)很簡(jiǎn)潔了,但是 async 更簡(jiǎn)潔,它可以通過(guò)寫(xiě)同步代碼來(lái)執(zhí)行異步的效果。如此神奇的 async 和 await 究竟是什么呢?讓我們一起來(lái)一探究竟吧!

1、引例闡述

先用一個(gè)例子來(lái)展示 promise 和 async/await 的區(qū)別。假設(shè)我們現(xiàn)在要用異步來(lái)實(shí)現(xiàn)加載圖片。

(1) 如果用 promise 的 .then 和 .catch 實(shí)現(xiàn)時(shí),代碼如下:

function loadImg(src){const picture = new Promise((resolve, reject) => {const img = document.createElement('img');img.onload = () => {resolve(img);}img.onerror = () => {const err = new Error(`圖片加載失敗 ${src}`);reject(err);}img.src = src;})return picture; }const url1 = 'https://dss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2144980717,2336175712&fm=58'; const url2 = 'https://dss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=614367910,2483275034&fm=58';loadImg(url1).then(img1 => {console.log(img1.width);return img1; //普通對(duì)象 }).then(img1 => {console.log(img1.height);return loadImg(url2); //promise 實(shí)例 }).then(img2 => {console.log(img2.width);return img2; }).then(img2 => {console.log(img2.height); }).catch(ex => console.error(ex));

(2) 如果用 async 實(shí)現(xiàn)時(shí),代碼如下:

function loadImg(src){const picture = new Promise((resolve, reject) => {const img = document.createElement('img');img.onload = () => {resolve(img);}img.onerror = () => {const err = new Error(`圖片加載失敗 ${src}`);reject(err);}img.src = src;})return picture; }const url1 = 'https://dss1.baidu.com/6ONXsjip0QIZ8tyhnq/it/u=2144980717,2336175712&fm=58'; const url2 = 'https://dss2.bdstatic.com/8_V1bjqh_Q23odCf/pacific/1990552278.jpg';!(async function () {// img1const img1 = await loadImg(url1);console.log(img1.width, img1.height);// img2const img2 = await loadImg(url2);console.log(img2.width, img2.height); })();

大家可以看到,如果用第二種方式的話(huà),代碼要優(yōu)雅許多。且最關(guān)鍵的是,通過(guò) async 和 await ,用同步代碼就可以實(shí)現(xiàn)異步的功能。接下來(lái)我們開(kāi)始來(lái)了解 async 和 await 。

2、async和await

  • 背景:解決異步回調(diào)問(wèn)題,防止深陷回調(diào)地獄 Callback hell ;
  • Promise :Promise then catch 是鏈?zhǔn)秸{(diào)用,但也是基于回調(diào)函數(shù);
  • async/await :async/await 是同步語(yǔ)法,徹底消滅回調(diào)函數(shù),是消滅異步回調(diào)的終極武器。

3、async/await和promise的關(guān)系

(1) async/await 與 promise 并不互斥,兩者相輔相成。

(2) 執(zhí)行 async 函數(shù),返回的是 promise 對(duì)象。

(3) await 相當(dāng)于 promise 的 then 。

(4) try…catch 可以捕獲異常,代替了 promise 的 catch 。

接下來(lái)我們來(lái)一一(2)(3)(4)演示這幾條規(guī)則。

第一條規(guī)則: 執(zhí)行 async 函數(shù),返回的是 promise 對(duì)象。

async function fn1(){return 100; //相當(dāng)于return promise.resolve(100); }const res1 = fn1(); //執(zhí)行async函數(shù),返回的是一個(gè)Promise對(duì)象 console.log('res1', res1); //promise對(duì)象 res1.then(data => {console.log('data', data); //100 });

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

大家可以看到,第一個(gè) res1 返回的是一個(gè) promise 對(duì)象,且此時(shí) promise 對(duì)象的狀態(tài)是 fulfilled 狀態(tài),所以可以調(diào)用后續(xù)的 .then 并且打印出 data 100 。

第二條規(guī)則: await 相當(dāng)于 promise 的 then 。

!(async function (){const p1 = Promise.resolve(300);const data = await p1; //await 相當(dāng)于 promise的thenconsole.log('data', data); //data 300 })();!(async function () {const data1 = await 400; //await Promise.resolve(400)console.log('data1', data1); //data1 400 })();

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

大家可以看到, p1 調(diào)用 resolve 回調(diào)函數(shù),所以此時(shí) p1 屬于 fulfilled 狀態(tài),之后 const data = await p1 中的await,相當(dāng)于 promise 的 then ,又因?yàn)榇藭r(shí) p1 屬于 fulfilled 狀態(tài),所以可以對(duì) .then 進(jìn)行調(diào)用,于是輸出 data 300 。同理在第二段代碼中, await 400 時(shí), 400 即表示 Promise.resolved(400) ,因此屬于 fulfilled 狀態(tài),隨后調(diào)用 .then ,打印出 data1 400 結(jié)果。

再來(lái)看一段代碼:

!(async function (){const p2 = Promise.reject('err1');const res = await p4; //await 相當(dāng)于 promise的thenconsole.log('res', res); //不打印 })();

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

大家可以看到, p2 調(diào)用 reject 回調(diào)函數(shù),所以此時(shí) p2 屬于 reject 狀態(tài)。但因?yàn)閍wait是觸發(fā) promise 中的 .then ,所以此時(shí) res 不會(huì)被觸發(fā),于是后續(xù)不會(huì)對(duì)await進(jìn)行操作,控制臺(tái)也就不對(duì) console.log('res', res); 進(jìn)行打印。

第三條規(guī)則: try…catch 可以捕獲異常,代替了 promise 的 catch 。

!(async function () {const p3 = Promise.reject('err1'); //rejected 狀態(tài)try{const res = await p3;console.log(res);}catch(ex){console.error(ex); //try…catch 相當(dāng)于 promise的catch} })();

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

大家可以看到, p3 調(diào)用 reject 回調(diào)函數(shù),所以此時(shí) p3 屬于 rejected 狀態(tài),因此它不會(huì)執(zhí)行 try 的內(nèi)容,而是去執(zhí)行 catch 的內(nèi)容, try…catch 中的 catch 就相當(dāng)于 promise 中的 catch ,且此時(shí) p3 屬于 rejected 狀態(tài),因此執(zhí)行 catch ,瀏覽器捕獲到異常,報(bào)出錯(cuò)誤。

4、異步的本質(zhì)

從上面的分析中,不管是 promise 還是 async/await ,都是解決異步問(wèn)題。但是呢,異步的本質(zhì)還是解決同步的問(wèn)題,所以,異步的本質(zhì)是:

  • async/await 是消滅異步回調(diào)的終極武器;
  • JS 是單線(xiàn)程的,需要有異步,需要基于 event loop ;
  • async/await 是一個(gè)語(yǔ)法糖,但是這顆糖非常好用!!

我們來(lái)看兩道 async/await 的順序問(wèn)題,回顧 async/await 。

第一題:

async function async1(){console.log('async start'); // 2await async2();//await 的后面,都可以看做是callback里面的內(nèi)容,即異步。//類(lèi)似event loop//Promise.resolve().then(() => console.log('async1 end'))console.log('async1 end'); // 5 }async function async2(){console.log('async2'); //3 }console.log('script start'); // 1 async1(); console.log('script end'); // 4

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

從上面這段代碼中可以看到,先執(zhí)行同步代碼 1 ,之后執(zhí)行回調(diào)函數(shù) async1() ,在回調(diào)函數(shù) async1() 當(dāng)中,先執(zhí)行同步代碼 2 ,之后遇到 await ,值得注意的是, await 的后面,都可以看作是 callback 里面的內(nèi)容,即異步內(nèi)容,所以,先執(zhí)行 await 中對(duì)應(yīng)的 async2() 里面的內(nèi)容,之后把 await 后面所有的內(nèi)容放置到異步當(dāng)中。繼續(xù)執(zhí)行 4 ,等到 4 執(zhí)行完時(shí),整個(gè)同步代碼已經(jīng)執(zhí)行完,最后,再去執(zhí)行異步的代碼,最終輸出 5 的內(nèi)容。

同樣的方式來(lái)來(lái)分析第二題。

第二題:

async function async1(){console.log('async1 start'); //2await async2();// 下面三行都是異步回調(diào),callback的內(nèi)容console.log('async1 end'); //5await async3();// 下面一行是回調(diào)的內(nèi)容,相當(dāng)于異步回調(diào)里面再嵌套一個(gè)異步回調(diào)。console.log('async1 end 2'); //7 }async function async2(){console.log('async2'); //3 }async function async3(){console.log('async3'); //6 }console.log('script start'); //1 async1(); console.log('script end'); //4

在以上的這段代碼中,控制臺(tái)打印結(jié)果如下。

這里就不再進(jìn)行分析啦!大家可以根據(jù)第一個(gè)案例的步驟進(jìn)行分析。

5、場(chǎng)景題

最后的最后,我們?cè)賮?lái)做兩道題回顧我們剛剛講過(guò)的 async/await 知識(shí)點(diǎn)。

(1)async/await語(yǔ)法

async function fn(){return 100; } (async function(){const a = fn(); //?? Promiseconst b = await fn(); //?? 100 })(); (async function(){console.log('start');const a = await 100;console.log('a', a);const b = await Promise.resolve(200);console.log('b', b);const c = await Promise.reject(300); //出錯(cuò)了,再往后都不會(huì)執(zhí)行了console.log('c', c);console.log('end'); })(); //執(zhí)行完畢,打印出哪些內(nèi)容? //start //100 //200

(2)async/await的順序問(wèn)題

async function async1(){console.log('async1 start'); // 2await async2();//await后面的都作為回調(diào)內(nèi)容 —— 微任務(wù)console.log('async1 end'); // 6 }async function async2(){console.log('async2'); // 3 }console.log('script start'); // 1setTimeout(function(){ //宏任務(wù) —— setTimeoutconsole.log('setTimeout'); // 8 }, 0);//遇到函數(shù),立馬去執(zhí)行函數(shù) async1();//初始化promise時(shí),傳入的函數(shù)會(huì)立刻被執(zhí)行 new Promise(function(resolve){ //promise —— 微任務(wù)console.log('promise1'); // 4resolve(); }).then(function(){ //微任務(wù)console.log('promise2'); // 7 });console.log('script end'); // 5//同步代碼執(zhí)行完畢(event loop —— call stack 被清空) //執(zhí)行微任務(wù) //(嘗試觸發(fā) DOM 渲染) // 觸發(fā)event loop,執(zhí)行宏任務(wù)

這里就不再進(jìn)行一一解析啦!大家可以前面知識(shí)點(diǎn)的學(xué)習(xí)總計(jì)再回顧理解。

四、寫(xiě)在最后

關(guān)于 js 的異步問(wèn)題以及異步的解決方案問(wèn)題就講到這里啦!u1s1, promise 和 async/await 在我們?nèi)粘5那岸碎_(kāi)發(fā)中還是蠻重要的,基本上寫(xiě)異步代碼時(shí)候都會(huì)用到 async/await 來(lái)解決。啃了16個(gè)小時(shí)總結(jié)了event loop 和 promise 、async/await 問(wèn)題,希望對(duì)大家有幫助。

同時(shí),里面可能有一些講的不好或者不容易理解的地方也歡迎評(píng)論區(qū)評(píng)論或私信我交流~

關(guān)注公眾號(hào) 星期一研究室 ,不定期分享學(xué)習(xí)干貨~

如果這篇文章對(duì)你有用,記得點(diǎn)個(gè)贊加個(gè)關(guān)注哦~

總結(jié)

以上是生活随笔為你收集整理的解决异步问题,教你如何写出优雅的promise和async/await,告别callback回调地狱!的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

少妇搡bbbb搡bbb搡aa | 日躁夜躁狠狠躁2001 | 亚洲精品乱码久久久久久蜜桃91 | 日韩欧美在线综合网 | 69精品人人人人 | 成人免费观看在线视频 | 久久成电影 | av在线电影网站 | 日本天天色| 午夜久久福利影院 | 久青草国产在线 | 激情中文在线 | 伊人国产在线观看 | 天天干,天天射,天天操,天天摸 | 国产自在线 | 亚洲精品黄网站 | 免费开视频 | 99久久精品免费一区 | 在线观看国产一区 | 全黄色一级片 | 国产精品麻豆99久久久久久 | 日日夜精品 | 91天天操 | 国产系列 在线观看 | 国产99久久久国产精品 | 99欧美视频 | 香蕉影视| 国产欧美高清 | 婷婷六月天在线 | 波多野结衣综合网 | 欧美做受高潮电影o | 亚洲精品456在线播放 | 在线观看一区二区精品 | 成年人免费看的视频 | 一级性生活片 | 欧美综合国产 | 丁香视频在线观看 | 日本成人免费在线观看 | 成人网444ppp | 欧美日韩一区二区三区在线免费观看 | 色在线网 | 欧美极品少妇xbxb性爽爽视频 | 五月婷久久 | 97在线免费观看视频 | 日韩精品第1页 | 国产精品久久久久国产a级 激情综合中文娱乐网 | 国产精品黄色 | 人人澡视频 | 中文字幕精品在线 | 国产一区二区精品久久91 | 国内成人av| 久久久久美女 | 又色又爽又黄高潮的免费视频 | 精品亚洲午夜久久久久91 | 久久久久99精品成人片三人毛片 | 色噜噜噜 | 精品久久久久一区二区国产 | 能在线看的av | 中文字幕刺激在线 | 成人精品视频 | 久国产在线播放 | 欧美日本啪啪无遮挡网站 | 国色天香永久免费 | 玖玖综合网| 99精品乱码国产在线观看 | 亚洲国产影院av久久久久 | 久久久久国产精品视频 | 香蕉视频网址 | 成人av电影免费观看 | 中文av字幕在线观看 | 天天躁天天躁天天躁婷 | a级国产乱理论片在线观看 特级毛片在线观看 | 天天操网址 | 欧美亚洲另类在线视频 | 精品一二三区视频 | 久久在现视频 | 国产一级精品视频 | www.色综合.com | 国产综合在线视频 | 国产在线中文字幕 | 三级av免费 | 日本黄色免费网站 | 亚洲一区二区三区四区精品 | 亚洲蜜桃在线 | 欧日韩在线视频 | 久久综合五月天婷婷伊人 | 天天爽网站 | 在线视频app | 欧美成人tv| 日韩免费看片 | 丁香花中文在线免费观看 | 97av在线 | 日韩精品一区二区三区免费观看 | 不卡视频在线 | 亚洲伊人av | 日韩在线电影观看 | 国产精品成人国产乱一区 | 国产免费不卡av | 高清av在线 | 麻豆免费在线播放 | 国产第一二区 | 特级毛片在线免费观看 | 欧美aa在线| 永久免费视频国产 | 正在播放一区 | 亚洲欧美综合 | 国产成人一区二区三区免费看 | 久久久久人人 | 天堂av最新网址 | 国产69久久久欧美一级 | 四虎影视精品永久在线观看 | 国产日韩欧美视频 | 亚洲精品乱码久久久久久9色 | 99久久er热在这里只有精品15 | 精品亚洲免a| 国产不卡在线视频 | 日韩av资源站 | 97在线超碰 | 中文字幕精品三级久久久 | 粉嫩av一区二区三区四区 | 97精品伊人 | 天天玩夜夜操 | 国产精品乱码久久久久久1区2区 | 深爱激情开心 | 国产亚洲精品久久久久久久久久久久 | 麻豆91视频 | 成人午夜剧场在线观看 | 亚洲精品www久久久 www国产精品com | 欧美日韩国产精品一区二区三区 | 日韩二区三区在线观看 | 日韩av一卡二卡三卡 | 免费看毛片网站 | 成人羞羞免费 | 偷拍区另类综合在线 | 日本中文字幕免费观看 | 欧美aaa一级| 国产亚洲欧美在线视频 | 啪啪免费观看网站 | 亚洲精品乱码久久久久久蜜桃动漫 | 午夜91在线 | 91社区国产高清 | av黄网站 | 免费久久片 | 久久中文字幕在线视频 | 亚洲激情中文 | 韩国av免费在线 | 一区二区不卡视频在线观看 | 97av在线视频免费播放 | 五月婷婷电影网 | 又黄又爽又湿又无遮挡的在线视频 | 午夜国产成人 | 三级黄免费看 | 日韩av高潮 | 久久久久综合网 | 日韩欧美在线播放 | 在线导航福利 | h网站免费在线观看 | av福利免费| 欧美视频不卡 | 91精品秘密在线观看 | 亚洲国产网址 | 天天做天天爱夜夜爽 | 天天激情综合网 | 久久黄色网址 | 久久久久久毛片精品免费不卡 | 欧女人精69xxxxxx| 国内精品福利视频 | 天天爱天天色 | 日韩,中文字幕 | 久久精品小视频 | 成人av在线一区二区 | 国产精品成人久久久 | 欧洲精品一区二区 | 色综合激情久久 | 91亚洲精品久久久蜜桃 | 婷婷色九月 | 日韩精品亚洲专区在线观看 | 免费a视频 | 久久久国产影院 | 91cn国产在线 | 亚洲精品国产第一综合99久久 | 国产精品青青 | 免费十分钟| 国产精品 中文字幕 亚洲 欧美 | 一级片色播影院 | 2021国产精品视频 | 色偷偷网站视频 | 日本韩国欧美在线观看 | 天天色综合三 | 在线观看的a站 | www黄色软件| 国产精品视频免费 | 99中文字幕在线观看 | 五月导航 | 久草免费在线观看视频 | 国产无遮挡又黄又爽馒头漫画 | 伊人狠狠操 | 亚洲免费公开视频 | 欧美精品在线视频 | 日本精品一区二区在线观看 | 亚洲精品乱码久久久久久按摩 | 成年人视频免费在线 | 中文字幕高清在线播放 | 日本丰满少妇免费一区 | 超级碰碰碰碰 | 高清精品久久 | 免费在线观看av的网站 | 91亚瑟视频 | 国产一区福利 | 国产永久免费高清在线观看视频 | 精品一区二区在线播放 | 韩国av一区 | 五月情婷婷 | 免费在线观看国产黄 | 色五婷婷 | 日韩免费一区二区 | 日韩精品第1页 | 欧洲高潮三级做爰 | 中文字幕亚洲情99在线 | 狠狠成人 | 日本成人中文字幕在线观看 | 国产一区二区在线免费视频 | 深夜免费福利在线 | 操久| 99精品国产免费久久久久久下载 | 成年人黄色免费看 | 国产成人福利在线 | 久久在线观看 | 亚洲va韩国va欧美va精四季 | 成人久久久久久久久久 | 四虎伊人 | 国产成人综合在线观看 | 色99之美女主播在线视频 | 国产一区二区三区四区在线 | 国产男女爽爽爽免费视频 | 91麻豆网站 | 亚洲激情在线播放 | a黄色大片 | 欧美日韩视频免费 | 欧美午夜精品久久久久久孕妇 | 日韩在线观看你懂的 | 久久久久久看片 | 国产精品99久久99久久久二8 | 成人国产亚洲 | 亚洲免费永久精品国产 | 久久久久久久免费观看 | 又色又爽的网站 | 91看片在线| 99久久久久久久久久 | 久久成人午夜 | 国产免费黄视频在线观看 | 三级av黄色 | 亚洲区另类春色综合小说校园片 | 婷婷亚洲五月色综合 | 狠狠色免费 | 美国三级黄色大片 | 成人欧美一区二区三区在线观看 | 久久免费视频7 | 婷婷午夜天 | 欧美精品亚州精品 | 国产黑丝一区二区 | 这里只有精彩视频 | 婷婷成人亚洲综合国产xv88 | 久99视频| 国产九色91 | 国产美女在线精品免费观看 | 97在线视频免费 | 亚洲国产精品成人精品 | 色综合久久久久网 | 欧美日本日韩aⅴ在线视频 插插插色综合 | 免费在线观看a v | 天天摸天天弄 | 中文字幕久久久精品 | 黄色在线网站噜噜噜 | 国产黄免费在线观看 | 日本久久久久久久久 | 亚洲永久精品一区 | 国产精品毛片一区 | 亚洲免费在线视频 | 狠狠色香婷婷久久亚洲精品 | 91精品久久久久久久91蜜桃 | 成人动态视频 | 久久99影院 | 在线中文字幕av观看 | 亚洲精品国产自产拍在线观看 | 亚洲精品xxxx | 日韩中文字幕在线观看 | 东方av免费在线观看 | 天天射天天拍 | 欧美吞精 | 国产精品久久嫩一区二区免费 | 最近中文字幕免费视频 | 色综合久久88色综合天天人守婷 | 91久久久久久久一区二区 | 性色av一区二区三区在线观看 | 中文字幕在线观看视频一区二区三区 | 在线亚洲成人 | 亚洲日本va午夜在线电影 | 日韩高清片 | av资源在线看 | 999成人国产 | 欧美一级久久久久 | 免费国产一区二区视频 | 五月婷婷婷婷婷 | 亚洲精品456在线播放第一页 | 97色噜噜 | 久久欧美在线电影 | 国产又粗又硬又爽的视频 | 日韩免费高清在线观看 | 国产麻豆视频在线观看 | 国产欧美综合视频 | 91精品国产入口 | 欧美日韩国产一区二 | 视频在线亚洲 | 成人黄色在线视频 | 久久视讯| 在线黄色国产电影 | 日韩久久精品一区二区 | 狠狠狠狠狠狠狠狠干 | 99久久日韩精品视频免费在线观看 | 91精品久久香蕉国产线看观看 | 色婷婷综合久久久中文字幕 | 久章操 | 美女网站一区 | 狠狠色综合欧美激情 | 樱空桃av | av黄色免费在线观看 | www.操.com | 国产精品久久久99 | 99久久婷婷国产 | 天天操天天操天天爽 | 天天综合网久久 | 国产不卡免费视频 | 天天爽天天碰狠狠添 | 久久免费在线视频 | 久久线视频 | 麻豆精品国产传媒 | 中文字幕在线不卡国产视频 | 婷婷国产在线 | 97日日碰人人模人人澡分享吧 | 亚洲欧美乱综合图片区小说区 | 伊人日日干 | 国产在线精品区 | 亚洲精品在线二区 | 日韩专区视频 | 黄色三级免费看 | 免费国产一区二区视频 | 天堂网一区 | 国产黄色片免费看 | 三级黄色大片在线观看 | 亚洲国产电影在线观看 | 伊人影院在线观看 | 亚洲在线观看av | 久久精品导航 | 国产精品免费麻豆入口 | 成 人 黄 色 免费播放 | 国产精品欧美久久久久久 | 国产精品毛片一区二区在线 | 在线视频观看你懂的 | 午夜精品剧场 | 国产一级黄色电影 | 六月丁香激情综合色啪小说 | 国产在线免费av | 成人高清av在线 | 国产又粗又猛又黄又爽的视频 | 成人视屏免费看 | 91九色在线观看视频 | 国产亚洲观看 | 国产成人精品午夜在线播放 | 免费黄色av. | 日韩在线观看一区二区三区 | av不卡免费看 | 日韩在线观看视频在线 | 狠狠色丁香久久婷婷综合五月 | www黄com| 五月婷婷久 | 亚洲精品97 | 久久久久久久久亚洲精品 | 成人黄色毛片视频 | 成人国产精品入口 | 狠狠操导航 | 日韩在线视频线视频免费网站 | 国产成人三级在线观看 | 黄色小说在线免费观看 | 九九在线免费视频 | 久久福利国产 | 尤物一区二区三区 | 日韩区欧美久久久无人区 | 精品麻豆| www.天天操 | 日韩v在线 | 黄色毛片在线观看 | 亚洲久久视频 | 日韩视频图片 | 日韩精品一区二区在线观看视频 | 久久视 | 99久久99久久精品 | 国产精品免费人成网站 | 欧美亚洲国产日韩 | 视频 天天草 | 亚洲欧美国产精品18p | 久久天天操| 欧美精品成人在线 | 精品国产亚洲一区二区麻豆 | 久久久99国产精品免费 | 成人免费网视频 | 久久精品视频在线播放 | 波多野结衣综合网 | 国产电影一区二区三区四区 | av网站地址 | 日韩欧美精品在线观看视频 | 欧洲av在线| 96看片| 欧美日韩一区二区久久 | 激情伊人五月天 | av一级片网站 | 国产一区视频在线 | 欧美做受69| 黄色av高清 | 一区二区视频在线看 | 国产91精品久久久久 | 免费网站污 | 久久视频国产精品免费视频在线 | 成人黄色电影在线播放 | 国产精品久久久久婷婷二区次 | 天天干夜夜爽 | 亚洲精品午夜国产va久久成人 | 国产一级高清 | 国产精品国产三级在线专区 | 在线中文字幕电影 | 国产不卡av在线 | 国产精品96久久久久久吹潮 | 日韩在线视频观看 | 黄网站污| 天天天干 | 天天干天天在线 | 国产自在线 | 日韩网站中文字幕 | 夜夜澡人模人人添人人看 | 一本色道久久精品 | 免费aa大片 | 免费国产亚洲视频 | 97成人在线观看视频 | 激情综合啪 | 欧美精品一区二区在线播放 | 偷拍精品一区二区三区 | 亚洲精品乱码久久久久久蜜桃91 | 国产高清不卡在线 | 日韩视频一区二区在线观看 | 久久久久久久久久久综合 | 国产999精品久久久久久 | 久草久 | 人人爽人人爱 | 一区二区三区中文字幕在线观看 | 久久久久久久久久久免费视频 | 久视频在线| 久久人91精品久久久久久不卡 | 国内成人av | 91桃色国产在线播放 | 丁香视频全集免费观看 | 久久婷婷综合激情 | 日韩理论影院 | 四虎影视国产精品免费久久 | 中文字幕91视频 | 麻花传媒mv免费观看 | 国产原创91 | 中文字幕免费久久 | 国产黄网站在线观看 | 丁香花五月 | 91九色最新地址 | 色综合久久久久综合体桃花网 | 国产精品毛片一区二区三区 | h网站免费在线观看 | 天天射天天操天天 | www.久久久.com | 色天天综合久久久久综合片 | 国精产品999国精产品岳 | 欧美性猛片, | 久久永久免费 | 国产原创在线 | 国产精品一区二区三区免费视频 | 九九久久免费 | 日本aa在线 | 天天干夜夜爱 | 高清国产一区 | 国产高清免费在线观看 | 久久99精品久久久久久久久久久久 | 麻豆成人精品 | 在线观看理论 | 少妇bbb好爽 | 国产精品18毛片一区二区 | 久久99国产精品久久99 | 欧美激情第十页 | 六月婷婷久香在线视频 | 国产精品一区二区av | 一区二区三区国产欧美 | 国产精品久久久久久久久久不蜜月 | 国产 色| 欧美一级片免费 | 久久亚洲影视 | 日韩在线免费视频 | 日韩精品一卡 | 国产美女视频网站 | 波多野结衣电影一区二区 | 国产精品永久免费在线 | 丁香激情视频 | 99久久这里只有精品 | 国产成人一区二区在线观看 | 国产精品久久久久久久久久免费 | 99 视频 高清| 在线观看免费国产小视频 | 日韩精品一区二区免费视频 | 天天爱天天干天天爽 | 999久久久欧美日韩黑人 | 九九视频在线 | 四虎在线影视 | 久久久免费看片 | a久久久久| 久久国产色 | 精油按摩av | 亚洲国产激情 | 国产精品一区二区免费 | 日韩一二区在线观看 | 中文字幕高清免费日韩视频在线 | 久久情爱 | 伊甸园av在线| 国产男女爽爽爽免费视频 | 成人久久久久久久久 | 黄色网www | 黄色免费网战 | 91精品一区二区三区蜜臀 | 99精品国产在热久久下载 | 日一日操一操 | 亚洲精品黄色片 | 激情综合狠狠 | 丝袜av一区 | 9999在线观看| 丁香花在线视频观看免费 | 亚洲欧美精品一区二区 | 国产一级免费观看视频 | 国产精品初高中精品久久 | 精品国产免费久久 | 在线色亚洲| 亚洲三级av | 免费黄色在线播放 | 97**国产露脸精品国产 | 97超碰在线播放 | 激情小说网站亚洲综合网 | 日韩特级片 | 欧美永久视频 | 久久久久久美女 | 国产在线更新 | 亚洲综合在线五月天 | 成人精品一区二区三区中文字幕 | 日韩高清在线一区二区三区 | 永久免费的av电影 | 中文字幕精品一区久久久久 | 日韩在线激情 | 99爱在线观看 | 黄污在线看 | 国产99精品 | 成人h电影在线观看 | 亚洲精品美女久久久久 | 精品久久电影 | 成人动图 | 中文字幕91在线 | 91成年视频 | 天天色天天射天天操 | 亚洲一级二级三级 | 五月婷婷毛片 | 国产中文视 | 免费h在线观看 | 操高跟美女 | 99精品免费 | 在线播放日韩 | aaa亚洲精品一二三区 | 西西444www大胆无视频 | 国产资源精品 | 亚洲最大av在线播放 | 亚洲精品小视频 | 激情综合亚洲 | 亚洲视频,欧洲视频 | 99精品一区 | 欧美激情视频在线观看免费 | 不卡的av| 久久国产精品久久精品国产演员表 | 亚洲欧美国产日韩在线观看 | 又黄又爽的视频在线观看网站 | .国产精品成人自产拍在线观看6 | 天天操天天射天天操 | 亚洲成人精品久久 | 人人躁| 亚洲va男人天堂 | 色婷婷婷 | 精品国产乱码久久久久久天美 | avlulu久久精品| 国产美女免费观看 | 久久9999久久免费精品国产 | 黄色福利网站 | 色综合久久综合中文综合网 | 中文字幕免费一区二区 | 黄色官网在线观看 | 视频二区在线 | av中文字幕在线播放 | 亚洲电影影音先锋 | 奇米网在线观看 | 天天干天天干天天射 | 久久影视一区 | 蜜桃麻豆www久久囤产精品 | 99免费在线 | 亚洲成人av片在线观看 | 日本不卡一区二区 | 中文字幕在线观看免费 | 精品一区二三区 | 亚洲 中文 欧美 日韩vr 在线 | 色婷婷狠 | 一区二区在线影院 | 国产色妞影院wwwxxx | 欧美国产日韩在线观看 | 中文字幕一区在线观看视频 | 日韩精品一区二区在线观看视频 | 国产无区一区二区三麻豆 | 夜夜嗨av色一区二区不卡 | 亚洲综合视频在线 | 99国产免费网址 | 99久久精品久久亚洲精品 | 麻豆视频免费播放 | 狠狠躁18三区二区一区ai明星 | 亚洲黄色一级视频 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品av免费观看 | 国产热re99久久6国产精品 | 国产精久久久 | 日韩欧美高清一区二区 | 国产综合久久 | 伊人手机在线 | 久久成视频| 亚洲综合欧美激情 | 亚洲91在线 | 国产精品热 | 久久精品视频在线看 | 五月亚洲综合 | 5月丁香婷婷综合 | 亚洲三级av | 成人小视频在线观看免费 | 国产福利一区二区在线 | 91大片网站 | 97人人澡人人添人人爽超碰 | 亚洲欧美日韩精品久久久 | 国产在线观看国语版免费 | 九九久久国产精品 | 成人午夜剧场在线观看 | 免费视频你懂的 | 日韩最新av在线 | 日韩99热 | 成人福利在线 | 精品国产三级 | 婷婷丁香导航 | 国产成人精品国内自产拍免费看 | 免费在线观看黄色网 | 久久丁香网 | 国产不卡免费av | 日韩精品视频一二三 | 成人国产网址 | 精品久久电影 | 99免费| 免费91麻豆精品国产自产在线观看 | 国产精久久久 | 日韩欧美精品在线观看 | 久草在线视频在线 | 日本xxxx裸体xxxx17 | 久久精品超碰 | 亚洲欧美日韩一区二区三区在线观看 | 亚洲专区 国产精品 | 国产麻豆视频在线观看 | 国产免费大片 | 久久久影院官网 | 西西4444www大胆无视频 | 91香蕉视频在线 | 久久免费在线视频 | 91中文在线 | 色综合久久久久综合体桃花网 | 又爽又黄又刺激的视频 | 亚洲黄色一级大片 | 亚洲精品视频在线观看免费 | 久久免费视频播放 | 91精品1区 | 亚洲砖区区免费 | 啪啪午夜免费 | 99久久精品国产免费看不卡 | 欧美视频www| 亚洲精品福利在线观看 | 国产精品99精品 | 亚洲成人在线免费 | 亚洲九九九在线观看 | 97人人模人人爽人人喊网 | 综合久久久久久久久 | 亚洲综合爱 | 亚洲国产一区在线观看 | 国产 日韩 在线 亚洲 字幕 中文 | 国产不卡毛片 | 天天天色综合 | 久久精品官网 | 国产中文字幕大全 | 国产99久久久国产精品免费看 | 99精品国产99久久久久久福利 | 久久久亚洲电影 | 91麻豆视频 | 国产午夜精品理论片在线 | 日韩在线中文字幕 | 久久精品久久精品久久39 | 欧美黄网站 | 婷婷丁香色综合狠狠色 | 99久久国产免费,99久久国产免费大片 | 视频在线亚洲 | 一级成人在线 | 中文av在线播放 | 国产伦理精品一区二区 | 精品国产成人av | 99久久精品久久亚洲精品 | 日本一区二区免费在线观看 | 麻豆视频一区二区 | 久久久久免费网站 | 97成人精品区在线播放 | 欧美成年网站 | 91精品视频在线免费观看 | 99久热在线精品视频成人一区 | 色综合天天视频在线观看 | 国产美女网站在线观看 | 欧美成人xxxx | 成人午夜黄色影院 | 久久夜色精品国产欧美一区麻豆 | 国产成人一区二区精品非洲 | 欧美一区二区免费在线观看 | 草在线视频 | 色综合久久久久综合体 | 国产精品一区久久久久 | 美州a亚洲一视本频v色道 | 成人av高清在线观看 | 在线免费观看的av | 亚洲91中文字幕无线码三区 | 亚洲一级黄色大片 | 日韩色在线观看 | 国产免费一区二区三区最新 | 国产精品99久久久久 | japanesefreesex中国少妇 | 亚洲无吗视频在线 | av.com在线| 色在线观看网站 | 亚洲天堂网在线视频观看 | 91麻豆高清视频 | 日韩欧美视频一区二区 | 国产久草在线 | 日韩在线观看网址 | 婷婷国产v亚洲v欧美久久 | 夜夜躁狠狠躁日日躁视频黑人 | 激情五月色播五月 | 免费日韩一区二区 | 中文字幕欧美三区 | 91私密视频 | aⅴ视频在线 | 日韩高清av在线 | 亚洲91网站 | 成人黄色小说网 | 久久久天天操 | 99在线观看视频网站 | 狠狠的日 | 日本激情视频中文字幕 | 久久国产网 | 综合网欧美 | 亚洲精品a区| 亚洲免费国产视频 | 国产精品视频永久免费播放 | 麻豆传媒在线免费看 | 免费在线精品视频 | 97超碰香蕉| 精品国产一二三四区 | 麻豆影视在线观看 | 麻豆精品在线视频 | 国产精品免费在线视频 | 97av影院 | 久草爱视频 | 999久久| 成人免费观看网站 | 亚洲欧洲日韩 | 国产精品视频内 | 欧美精品久久久久 | ww亚洲ww亚在线观看 | 免费看成人a | 亚洲涩涩网 | 少妇18xxxx性xxxx片 | 精品视频123区在线观看 | 国产二区免费视频 | 午夜精品一区二区三区可下载 | 亚洲精品久久久久久久不卡四虎 | 一级黄视频 | 99亚洲精品 | 欧美电影在线观看 | 国产精品久久久久影视 | 狠狠操操 | 久久久久国产精品www | 在线观看你懂的网站 | 婷婷射五月 | 69av免费视频| 日本免费久久高清视频 | 日日天天干 | 日韩免费观看视频 | 在线观看黄色大片 | 中文字幕av最新更新 | 成人免费一区二区三区在线观看 | 国产女人18毛片水真多18精品 | 国产二级视频 | 亚洲爱爱视频 | 成人国产精品久久久春色 | 久久免费在线 | 激情综合五月天 | 91成人观看 | 色吧av色av | 国产精品一区二区三区视频免费 | 亚洲丝袜一区二区 | 国产精品高潮久久av | 成人动漫一区二区三区 | 天天色中文 | 亚洲影音先锋 | 国产亚洲免费的视频看 | 日本电影久久 | 亚洲免费国产视频 | 亚洲午夜精品久久久久久久久久久久 | 色综合久久久久综合 | 成人av在线亚洲 | 欧美精品天堂 | 精品免费视频123区 午夜久久成人 | 国产精品成人免费精品自在线观看 | 开心激情婷婷 | 香蕉久久久久久av成人 | 玖玖综合网 | 久久九九国产视频 | 99精品国产99久久久久久97 | 天天操天天射天天爱 | 久久人人精品 | 国产午夜在线观看视频 | 91污污 | 国产成人精品亚洲精品 | 爱色婷婷| 精品毛片在线 | 国产小视频国产精品 | 手机在线看a | www激情网| 国产高清精品在线 | 天天爽网站 | 国产丝袜制服在线 | 午夜精品视频一区二区三区在线看 | 亚洲资源在线网 | 久久激情日本aⅴ | 伊人婷婷 | 亚洲aⅴ免费在线观看 | 国产精品久久久久av免费 | 在线观看精品一区 | 丁香婷婷射| 欧美日韩视频 | 在线免费观看视频一区 | 成人a在线观看高清电影 | 欧美久久久久久久久中文字幕 | 激情开心站 | avsex| 精品国产乱码一区二 | 久久国产精品视频免费看 | .精品久久久麻豆国产精品 亚洲va欧美 | 日韩欧美综合在线视频 | 成人在线观看资源 | 懂色av懂色av粉嫩av分享吧 | 美女黄网站视频免费 | 欧美一级艳片视频免费观看 | 国产麻豆传媒 | 亚洲精品午夜国产va久久成人 | 亚洲电影成人 | 丁香av | 性色av香蕉一区二区 | 在线成人av | 中文字幕激情 | 日韩一区正在播放 | 日韩精品免费在线观看 | japanesexxxxfreehd乱熟 | 亚洲精品在线免费 | av网站在线观看播放 | 国产理论免费 | 亚洲日本va午夜在线影院 | 大型av综合网站 | 国产高清区 | 日韩a在线观看 | 国产精品一级在线 | 99r精品视频在线观看 | 91久久久久久久 | 麻豆一区在线观看 | www.少妇| 九九在线视频 | 亚洲欧美视频在线播放 | 人人草人人草 | 亚洲免费视频观看 | 美女久久久久 | 国产 av 日韩 | 在线免费观看黄色av | 黄色片网站大全 | 久久a视频| 天堂av在线中文在线 | 2022久久国产露脸精品国产 | 亚洲成人资源在线 | www.狠狠操| 亚洲国产精品第一区二区 | 中文区中文字幕免费看 | 国产片网站 | 日韩免费电影在线观看 | 激情欧美日韩一区二区 | 久久久99精品免费观看乱色 | 免费下载高清毛片 | 欧美久久成人 | 国产一区二区在线影院 | 亚洲国产精品va在线看黑人动漫 | 欧美另类视频 | 91av电影在线 | 在线观看片 | 手机版av在线 | 国产亚洲激情视频在线 | 青青草国产免费 | 91资源在线播放 | 一区二区毛片 | 天天干.com| 久操视频在线免费看 | 人人玩人人添人人澡超碰 | 久久久久久久看片 | 中文字幕日韩高清 | av大全在线免费观看 | 性色在线视频 | 久久免费精品一区二区三区 | 男女啪啪视屏 | 精品国产一区二区三区久久久蜜臀 | 久久国产品 | 免费精品在线 | 久久久麻豆视频 | 一区二区三区动漫 | 91视频电影 | 亚洲免费不卡 | 亚洲国产日韩在线 | 久久精品一二区 | 91亚洲精品久久久 | 国产一区二区久久久久 | 麻豆一区二区三区视频 | 九九九电影免费看 | 8090yy亚洲精品久久 | 国产精品免费观看视频 | 亚洲激情电影在线 | 国产精品久久久久久久久免费看 | 免费黄色在线网址 | 亚洲精品国产免费 | 欧美亚洲成人xxx | 国产一级大片在线观看 | 中文字幕日韩一区二区三区不卡 | 手机av电影在线观看 | 日韩久久久久久久久 | 久久美女精品 | 六月天综合网 | 国产综合精品一区二区三区 | 国产日韩三级 | 国产字幕在线观看 | 国产 在线观看 | 国产精品久久久久久久久婷婷 | 国产一级精品在线观看 | 国产一二三精品 | 男女激情免费网站 | 精品久久久久国产免费第一页 | 嫩草av影院 | 中文字幕在线观看免费观看 | 毛片美女网站 | 免费瑟瑟网站 | 一区二区三区四区五区在线 | 在线观看黄色国产 | 91视频高清 | 最新国产精品亚洲 | 人人干干人人 | 91大片网站 | 国产高清中文字幕 | 丝袜足交在线 | 在线观看视频免费播放 | 国产 日韩 在线 亚洲 字幕 中文 | 日日爽夜夜操 | 久久人人爽人人片av | 午夜精品婷婷 | 国内精品久久久久影院日本资源 | 狠狠狠狠狠狠干 | 一区二区影院 | 日日夜夜狠狠操 | 中文字幕第一页在线 | 三级黄色在线观看 | 国产二区免费视频 | 天天插天天干天天操 | 国产一区二区免费在线观看 | 国产高清 不卡 | www.天天色|