国产99久久精品_欧美日本韩国一区二区_激情小说综合网_欧美一级二级视频_午夜av电影_日本久久精品视频

最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
當前位置: 首頁 - 科技 - 知識百科 - 正文

async/await地獄該如何避免詳解

來源:懂視網 責編:小采 時間:2020-11-27 22:14:53
文檔

async/await地獄該如何避免詳解

async/await地獄該如何避免詳解:前言 async/await是什么 async/await可以說是co模塊和生成器函數的語法糖。用更加清晰的語義解決js異步代碼。 熟悉co模塊的同學應該都知道,co模塊是TJ大神寫的一個使用生成器函數來解決異步流程的模塊,可以看做是生成器函數的執行器。而async/awa
推薦度:
導讀async/await地獄該如何避免詳解:前言 async/await是什么 async/await可以說是co模塊和生成器函數的語法糖。用更加清晰的語義解決js異步代碼。 熟悉co模塊的同學應該都知道,co模塊是TJ大神寫的一個使用生成器函數來解決異步流程的模塊,可以看做是生成器函數的執行器。而async/awa

問題

這里有個問題為什么從列表中選擇披薩這個動作要等待獲取飲料列表?這兩個是沒什么關聯的操作。其中的關聯操作有兩組:

獲取披薩列表 -》 選擇披薩 -》 選擇披薩加入購物車

獲取飲料列表 -》 選擇飲料 -》 選擇飲料加入購物車

這兩組操作應該是并發執行的。

再來看一個更差的例子

這個 Javascript 代碼片段將購物車中的商品并發出訂購請求。

async function orderItems() {
 const items = await getCartItems() // async call
 const noOfItems = items.length
 for(var i = 0; i < noOfItems; i++) {
 await sendRequest(items[i]) // async call
 }
}

這種情況 for 循環必須等待 sendRequest() 函數完成才能繼續下一次迭代。但是,我們并不需要等待。我們希望盡快發送所有請求。然后我們可以等待所有請求完成。

現在你應該已經對 async/await 地獄有跟多的了解,現在我們再來考慮一個問題

如果我們忘記 await 關鍵字會怎么樣?

如果在調用異步函數忘記使用 await,這意味著執行該功能不需要等待。異步函數將直接返回一個 promise,你可以稍后使用。

(async () => {
 const value = doSomeAsyncTask()
 console.log(value) // an unresolved promise
})()

或者是程序不清楚你想要等待函數執行完,直接退出不會完成這個異步任務。所以我們需要使用 await 這個關鍵字。

promise 有一個有趣的屬性,你可以在某行代碼中獲取 promise,然后在其他地方中等待它 resolve,這是解決 async/await 地獄的關鍵。

(async () => {
 const promise = doSomeAsyncTask()
 const value = await promise
 console.log(value) // the actual value
})()

如你所見 doSomeAsyncTask 直接返回一個 Promise 同時這個異步函數 doSomeAsyncTask 已經開始執行,為了得到 doSomeAsyncTask 的返回值,我們需要 await 來告訴

應該如何避免 async/await 地獄

首先我們需要知道哪些命名是有前后依賴關系的。

然后將有依賴關系的系列操作進行分組合并成一個異步操作。

同時執行這些異步函數。

我們來重寫這寫例子:

async function selectPizza() {
 const pizzaData = await getPizzaData() // async call
 const chosenPizza = choosePizza() // sync call
 await addPizzaToCart(chosenPizza) // async call
}

async function selectDrink() {
 const drinkData = await getDrinkData() // async call
 const chosenDrink = chooseDrink() // sync call
 await addDrinkToCart(chosenDrink) // async call
}

(async () => {
 const pizzaPromise = selectPizza()
 const drinkPromise = selectDrink()
 await pizzaPromise
 await drinkPromise
 orderItems() // async call
})()

// Although I prefer it this way

(async () => {
 Promise.all([selectPizza(), selectDrink()].then(orderItems) // async call
})()

我們將語句分成兩個函數。在函數內部,每個語句都依賴于前一個語句的執行。然后我們同時執行這兩個函數 selectPizza()和selectDrink() 。

在第二個例子中我們需要處理未知數量的 Promise。處理這個問題非常簡單,我們只需要創建一個數組將所有 Promise 存入其中,使用 Promise.all() 方法并行執行:

async function orderItems() {
 const items = await getCartItems() // async call
 const noOfItems = items.length
 const promises = []
 for(var i = 0; i < noOfItems; i++) {
 const orderPromise = sendRequest(items[i]) // async call
 promises.push(orderPromise) // sync call
 }
 await Promise.all(promises) // async call
}

總結

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

文檔

async/await地獄該如何避免詳解

async/await地獄該如何避免詳解:前言 async/await是什么 async/await可以說是co模塊和生成器函數的語法糖。用更加清晰的語義解決js異步代碼。 熟悉co模塊的同學應該都知道,co模塊是TJ大神寫的一個使用生成器函數來解決異步流程的模塊,可以看做是生成器函數的執行器。而async/awa
推薦度:
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 久久综合中文字幕一区二区 | 97精品国产福利一区二区三区 | 欧美激情亚洲图片 | 亚洲另类天堂 | 亚洲欧美网站 | 一级成人a免费视频 | 成人免费一级毛片在线播放视频 | 激情自拍网 | 国产91成人 | 欧美高清日韩 | 广东东莞一级毛片免费 | 国产香蕉视频在线观看 | 欧美日韩在线精品一区二区三区 | 国产码欧美日韩高清综合一区 | 影音先锋女人aa鲁色资源 | 一区二区三区久久 | 亚洲最新视频在线观看 | 777久久成人影院 | 亚洲一区二区影院 | 国产一区二区高清视频 | 国产精品久久久久久久久久久久 | 日本三级韩国三级欧美三级 | 一区二区三区视频 | 亚洲国产综合久久精品 | 亚洲第二页 | 亚洲视频播放 | 香蕉一区 | 日韩亚射 | 欧美一区二区高清 | 国产成人综合欧美精品久久 | 精品国产一区二区三区久久影院 | 国产精彩视频 | 欧美在线视频在线观看 | 综合精品欧美日韩国产在线 | 日本韩国欧美一区 | 欧美福利在线视频 | 久久久这里有精品999 | 欧美精品久久久久久久久大尺度 | 欧美日韩国产综合在线 | 香蕉91 | 欧美精品一区二区三区四区 |