国产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 19:47:58
文檔

async/await地獄問題處理

async/await地獄問題處理:這次給大家帶來async/await地獄問題處理,async/await地獄問題處理的注意事項有哪些,下面就是實戰案例,一起來看一下。前言async/await是什么async/await可以說是co模塊和生成器函數的語法糖。用更加清晰的語義解決js異步代碼。熟悉co模塊的同學應該都知
推薦度:
導讀async/await地獄問題處理:這次給大家帶來async/await地獄問題處理,async/await地獄問題處理的注意事項有哪些,下面就是實戰案例,一起來看一下。前言async/await是什么async/await可以說是co模塊和生成器函數的語法糖。用更加清晰的語義解決js異步代碼。熟悉co模塊的同學應該都知

問題

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

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

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

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

再來看一個更差的例子

這個 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
}

相信看了本文案例你已經掌握了方法,更多精彩請關注Gxl網其它相關文章!

推薦閱讀:

vue按鈕多次點擊重復提交數據如何處理

vue-router3.0版本router.push無法刷新頁面如何處理

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

文檔

async/await地獄問題處理

async/await地獄問題處理:這次給大家帶來async/await地獄問題處理,async/await地獄問題處理的注意事項有哪些,下面就是實戰案例,一起來看一下。前言async/await是什么async/await可以說是co模塊和生成器函數的語法糖。用更加清晰的語義解決js異步代碼。熟悉co模塊的同學應該都知
推薦度:
標簽: 地獄 解決 問題
  • 熱門焦點

最新推薦

猜你喜歡

熱門推薦

專題
Top
主站蜘蛛池模板: 日韩网站在线观看 | 欧美视频精品 | 国产码欧美日韩高清综合一区 | 国产精品亚洲综合一区 | 热久久91| 国产不卡的一区二区三区四区 | 在线观看国产欧美 | 亚洲欧美日韩国产综合高清 | 亚洲综合欧美日本另类激情 | 欧美wwww | 伊人97 | 国产a级一级久久毛片 | 日韩欧美国产综合 | 欧美色欧美亚洲另类 | 精品欧美成人高清视频在线观看 | 日韩va亚洲va欧美va浪潮 | 国内在线观看精品免费视频 | 欧美综合在线视频 | 欧美日韩国产片 | 人成精品视频三区二区一区 | 成人一区二区免费中文字幕 | 久久91精品国产一区二区 | 久久天堂| 国内精品久久久久久久久 | 一级黄免费 | 欧美高清第一页 | 国产毛片久久久久久国产毛片 | 91在线免费看 | 久久国语精品 | 亚洲午夜久久久久中文字幕 | 国产美女视频黄a视频免费全过程 | 国产一级二级三级 | 亚洲 欧洲 另类 综合 自拍 | 国产日韩精品欧美一区视频 | 亚洲v日韩v欧美在线观看 | 高清国产美女一级a毛片 | 国产一区二区福利久久 | 成人a毛片免费视频观看 | 国产69精品久久久久777 | 国产伦精品一区二区三区免费下载 | 欧美一区二区日韩一区二区 |