国产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
主站蜘蛛池模板: 中文国产成人精品久久一 | 国产成人精品日本亚洲专区6 | 欧美成人禁片在线观看网址 | 一区二区精品在线 | 美国美女一级毛片免费全 | 亚洲精品视频在线观看免费 | 亚洲欧美中文日韩在线 | 亚洲国产欧美在线 | 毛片一级免费 | 日韩成人在线观看视频 | 国内精品伊人久久久久妇 | 91欧洲在线视精品在亚洲 | 亚洲欧美日韩在线2020 | 一级毛片免费毛片毛片 | 国产精品资源在线播放 | 久久久精品麻豆 | 国产99在线播放 | 一区二区在线播放视频 | 精品一区二区三区免费毛片爱 | 国产精品视频久久久 | 欧美精品一区二区三区免费播放 | 中文国产成人精品久久一区 | 欧美国产成人精品一区二区三区 | 91精品国产色综合久久 | 国产免费网 | 亚洲精品国产精品精 | 亚洲综合图片小说区热久久 | 免费视频国产 | 伊人操 | 国产精品资源在线播放 | 亚洲综合欧美日本另类激情 | 国产一区二区精品久 | 日韩欧美精品一区二区三区 | 婷婷综合久久中文字幕蜜桃三电影 | 一级毛片特黄久久免费看 | 亚洲欧美日韩中文字幕在线 | 精品欧美一区二区在线观看欧美熟 | 久久免费国产精品一区二区 | 在线观看亚洲一区 | 国产成人乱码一区二区三区在线 | 亚洲欧美日韩精品永久在线 |