摘要:異步函數(shù)是指通過事件循環(huán)異步執(zhí)行的函數(shù),它會通過一個隱式的返回其結(jié)果。返回值返回對象的處理結(jié)果。當(dāng)請求必須要請求完成后,才能根據(jù)請求的結(jié)果,進行是否繼續(xù)請求的時候根據(jù)所有請求完成后,進行統(tǒng)計請求成功失敗數(shù)量等異步操作最后的回調(diào)
首先看下這段代碼:
async function submit(){ console.log("請求開始!") let data = await fetch("127.0.0.1:8888") .then(res => res.json()) .then(res => { console.log("請求成功!") return res }) console.log("請求結(jié)束"); } console.log("請求成功了么?");
執(zhí)行這這段代碼,你會發(fā)現(xiàn)控制板輸出的數(shù)據(jù)順序
"請求成功了么?" "請求開始!" "請求成功!" "請求結(jié)束!"async 定義
MDN:
async function 聲明用于定義一個返回 AsyncFunction 對象的異步函數(shù)。異步函數(shù)是指通過事件循環(huán)異步執(zhí)行的函數(shù),它會通過一個隱式的 Promise 返回其結(jié)果。但是如果你的代碼使用了異步函數(shù),它的語法和結(jié)構(gòu)會更像是標準的同步函數(shù)。
通俗的講,就是「異步」。讓這個fn支持異步繼續(xù),所以首先打印出來的是
"請求成功了么?"
async利用了影藏的promise對象,來控制函數(shù)異步進行,所以你在執(zhí)行async中,console會出來一個promise對象。
同時需要搭配await來阻塞內(nèi)部異步,來講操作
await 定義MDN:
await表達式會暫停當(dāng)前「async function」的執(zhí)行,等待Pormise處理完成,若Promise正常處理,則回調(diào)的resolve函數(shù)作為await表達式的值,繼續(xù)進行async function。表達式
一個 Promise 對象或者任何要等待的值。
返回值返回 Promise 對象的處理結(jié)果。如果等待的不是 Promise 對象,則返回該值本身。
所以上面代碼,內(nèi)部的執(zhí)行順序是
async function submit(){ // 開始執(zhí)行 console.log("請求開始!") // 遇到await,等待處理結(jié)果 let data = await fetch("127.0.0.1:8888") .then(res => res.json()) .then(res => { // 處理完成,返回處理結(jié)果 console.log("請求成功!") return res }) // 等待await處理完成后,執(zhí)行。 console.log("請求結(jié)束"); }注意:如果返回值不是Promise,則把該值轉(zhuǎn)換為已經(jīng)常處理的Promise,等待處理結(jié)構(gòu)(就是拋出該值)
async function f2() { var y = await 20; console.log(y); // 20 } f2();應(yīng)用場景
await可以阻塞主函數(shù),直到后面的Promise對象處理完成,這就很容易的解決了按順控制異步操作。
當(dāng)B請求必須要A請求完成后,才能根據(jù)A請求的結(jié)果,進行是否繼續(xù)請求B的時候
根據(jù)所有請求完成后,進行統(tǒng)計請求成功、失敗數(shù)量等
異步操作最后的回調(diào)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/104621.html
摘要:,用于調(diào)用垃圾收集器,在調(diào)用時,垃圾收集器將運行以回收未使用的內(nèi)存空間。然而調(diào)用附帶一個免責(zé)聲明,無法保證對垃圾收集器的調(diào)用。所以并不能說是完美主動進行了垃圾回收。 歡迎進入JAVA基礎(chǔ)課程 博客地址:https://blog.csdn.net/houjiyu...本系列文章將主要針對JAVA一些基礎(chǔ)知識點進行講解,為平時歸納所總結(jié),不管是剛接觸JAVA開發(fā)菜鳥還是業(yè)界資深人士,都希...
摘要:想閱讀更多優(yōu)質(zhì)文章請猛戳博客一年百來篇優(yōu)質(zhì)文章等著你引入的在的異步編程中是一個極好的改進??赡軙a(chǎn)生誤導(dǎo)一些文章將與進行了比較,并聲稱它是下一代異步編程風(fēng)格,對此作者深表異議。結(jié)論引入的關(guān)鍵字無疑是對異步編程的改進。 showImg(https://segmentfault.com/img/bVbjFP0?w=800&h=450); 想閱讀更多優(yōu)質(zhì)文章請猛戳GitHub博客,一年百來篇...
摘要:缺點無法取消當(dāng)處于狀態(tài)時,無法得知目前進展到哪一個階段錯誤不能被生成器什么是函數(shù)是提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同函數(shù)有多種理解角度。 JavaScript的執(zhí)行機制在上篇文章中進行了深入的探討,那么既然是一門單線程語言,如何進行良好體驗的異步編程呢 回調(diào)函數(shù)Callbacks 當(dāng)程序跑起來時,一般情況下,應(yīng)用程序(application program)會時常通...
摘要:缺點無法取消當(dāng)處于狀態(tài)時,無法得知目前進展到哪一個階段錯誤不能被生成器什么是函數(shù)是提供的一種異步編程解決方案,語法行為與傳統(tǒng)函數(shù)完全不同函數(shù)有多種理解角度。 JavaScript的執(zhí)行機制在上篇文章中進行了深入的探討,那么既然是一門單線程語言,如何進行良好體驗的異步編程呢 回調(diào)函數(shù)Callbacks 當(dāng)程序跑起來時,一般情況下,應(yīng)用程序(application program)會時常通...
閱讀 4102·2021-11-18 13:21
閱讀 4931·2021-09-27 14:01
閱讀 3179·2019-08-30 15:53
閱讀 2455·2019-08-30 15:43
閱讀 1793·2019-08-30 13:10
閱讀 1602·2019-08-29 18:39
閱讀 952·2019-08-29 15:05
閱讀 3403·2019-08-29 14:14