摘要:本身就是的語法糖。類似于后面代碼會(huì)等內(nèi)部代碼全部完成后再執(zhí)行打印結(jié)果操作符用于等待一個(gè)對(duì)象。它只能在異步函數(shù)中使用。參考附在版本位中是可以直接使用的。持續(xù)更新中來點(diǎn)顆吧
async await本身就是promise + generator的語法糖。
本文主要講述以下內(nèi)容
async awiat 實(shí)質(zhì)
async await 主要特性
async await 實(shí)質(zhì)下面使用 promise + generate 實(shí)現(xiàn) async await
// 轉(zhuǎn)換目標(biāo) async1 // async function async1() { // console.log("async1 start"); // await async2(); // console.log("async1 end"); // } function async1() { // 將 async 轉(zhuǎn)換成 *,將 awiat 轉(zhuǎn)換成 yield var awaitInstance = (function* () { console.log("async1 start"); yield async2(); console.log("async1 end"); })() // 自動(dòng)執(zhí)行 await 及后續(xù)代碼 // 簡(jiǎn)單起見,不處理異常情況 function step() { var next = awaitInstance.next(); // 使用Promise獲取 異步/同步 方法的結(jié)果,再執(zhí)行下一步 Promise.resolve(next.value).then(function (val) { if (!next.done) step(); }) } step(); // 返回Promise return Promise.resolve(undefined); }async await 特性
async 一定會(huì)返回 promise
// 案例1: 不設(shè)置return async function fn() {} fn().then(alert); // alert -> undefined // 案例2:return非promise async function f() { return 1 } f().then(alert); // alert -> 1 // 案例3: return Promise async function fn() { return Promise.resolve(2); } fn().then(alert); // alert -> 2
async 中代碼是直接執(zhí)行的(同步任務(wù))
console.log(1); async function fn() { console.log(2); await console.log(3) console.log(4) } fn(); console.log(5); // 打印 1 2 3 5 4 // 為何后面是 3 5 4 ? 往下看
await是直接執(zhí)行的,而await后面的代碼是 microtask。
async function async1() { console.log("async1 start"); await async2(); console.log("async1 end"); } // 類似于 async function async1() { console.log("async1 start"); Promise.resolve(async2()).then(() => { console.log("async1 end"); }) }
await后面代碼會(huì)等await內(nèi)部代碼全部完成后再執(zhí)行
async function async1() { console.log("async1 start"); await async2(); console.log("async1 end"); } async function async2() { return new Promise(function(resolve) { setTimeout(function() { console.log("sleep 2s"); resolve("do"); }, 2000) }) } async1(); // 打印結(jié)果 // async1 start -> sleep 2s -> async1 end
await 操作符用于等待一個(gè)Promise 對(duì)象。它只能在異步函數(shù) async function 中使用。參考 MDN
附: 在chrome版本 73.0.3683.86(64 位)中, await是可以直接使用的。 var x = await console.log(1)End
持續(xù)更新中 來Github 點(diǎn)顆?吧
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/54795.html
摘要:本身就是的語法糖。類似于后面代碼會(huì)等內(nèi)部代碼全部完成后再執(zhí)行打印結(jié)果操作符用于等待一個(gè)對(duì)象。它只能在異步函數(shù)中使用。參考附在版本位中是可以直接使用的。持續(xù)更新中來點(diǎn)顆吧 async await本身就是promise + generator的語法糖。 本文主要講述以下內(nèi)容 async awiat 實(shí)質(zhì) async await 主要特性 async await 實(shí)質(zhì) 下面使用 pro...
摘要:本身就是的語法糖。類似于后面代碼會(huì)等內(nèi)部代碼全部完成后再執(zhí)行打印結(jié)果操作符用于等待一個(gè)對(duì)象。它只能在異步函數(shù)中使用。參考附在版本位中是可以直接使用的。持續(xù)更新中來點(diǎn)顆吧 async await本身就是promise + generator的語法糖。 本文主要講述以下內(nèi)容 async awiat 實(shí)質(zhì) async await 主要特性 async await 實(shí)質(zhì) 下面使用 pro...
摘要:怎么處理返回值輸出結(jié)果從結(jié)果中可以看到函數(shù)返回的是一個(gè)對(duì)象,如果在函數(shù)中一個(gè)直接量,會(huì)把這個(gè)直接量通過封裝成對(duì)象。如果函數(shù)沒有返回值結(jié)果結(jié)果返回。 隨著async/await正式納入ES7標(biāo)準(zhǔn),越來越多的人開始研究據(jù)說是異步編程終級(jí)解決方案的 async/await。但是很多人對(duì)這個(gè)方法中內(nèi)部怎么執(zhí)行的還不是很了解,本文是我看了一遍技術(shù)博客理解 JavaScript 的 async/a...
摘要:異步函數(shù)是和的組合,基本上,它們是對(duì)的更高級(jí)別的抽象。引入的原因它們降低了對(duì)一些固定語法樣板的要求,打破了鏈?zhǔn)讲荒芮袛噫準(zhǔn)降南拗?。引入來解決著名的回調(diào)地獄問題,但是因?yàn)樗麄冏陨淼膹?fù)雜性,引入了更復(fù)雜的語法。 1、簡(jiǎn)介 需先了解 Promise 【鏈接地址】 JavaScript 中的異步函數(shù)方法。 JavaScript 在很短的時(shí)間內(nèi)從回調(diào)演變?yōu)?Promises ,從 ES2...
閱讀 1444·2021-11-22 15:24
閱讀 2537·2021-10-11 11:06
閱讀 2342·2021-10-09 09:45
閱讀 2541·2021-09-09 09:33
閱讀 647·2019-08-30 15:53
閱讀 1452·2019-08-30 12:48
閱讀 698·2019-08-29 13:47
閱讀 515·2019-08-26 18:27