前言
創(chuàng)新互聯(lián)建站基于成都重慶香港及美國等地區(qū)分布式IDC機(jī)房數(shù)據(jù)中心構(gòu)建的電信大帶寬,聯(lián)通大帶寬,移動大帶寬,多線BGP大帶寬租用,是為眾多客戶提供專業(yè)資陽移動機(jī)房報價,主機(jī)托管價格性價比高,為金融證券行業(yè)服務(wù)器托管,ai人工智能服務(wù)器托管提供bgp線路100M獨(dú)享,G口帶寬及機(jī)柜租用的專業(yè)成都idc公司。async/await是什么
async/await可以說是co模塊和生成器函數(shù)的語法糖。用更加清晰的語義解決js異步代碼。
熟悉co模塊的同學(xué)應(yīng)該都知道,co模塊是TJ大神寫的一個使用生成器函數(shù)來解決異步流程的模塊,可以看做是生成器函數(shù)的執(zhí)行器。而async/await則是對co模塊的升級,內(nèi)置生成器函數(shù)的執(zhí)行器,不再依賴co模塊。同時,async返回的是Promise。
從上面來看,不管是co模塊還是async/await,都是將Promise作為最基礎(chǔ)的單元,對Promise不很了解的同學(xué)可以先深入了解一下Promise。
async/await 寫著很爽,不過要注意這些問題。
async/await 讓我們擺脫了回調(diào)地獄,但是這又引入了 async/await 地獄的問題。
什么是 async/await 地獄
在 Javascript 中進(jìn)行異步編程的時候,人們總是使用很多 await 語句,很多時候我們的語句并不需要依賴于之前的語句,這樣就會導(dǎo)致性能問題。
async/await 地獄的例子
我們試著寫一個購買披薩和飲料的程序:
(async () => { const pizzaData = await getPizzaData() // async call const drinkData = await getDrinkData() // async call const chosenPizza = choosePizza() // sync call const chosenDrink = chooseDrink() // sync call await addPizzaToCart(chosenPizza) // async call await addDrinkToCart(chosenDrink) // async call orderItems() // async call })()