您好,登錄后才能下訂單哦!
這篇文章主要介紹“async、await和promise的區別是什么”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“async、await和promise的區別是什么”文章能幫助大家解決問題。
async函數是使用關鍵字聲明的函數。async 是“異步”的簡寫,所以應該很好理解 async 用于申明一個 function 是異步的。
用于解決:異步程序產生的bug
####async函數的語法
async function name([param[, param[, ... param]]]) { statements }
參數:name 函數名稱
param 要傳遞給函數的參數的名稱
statements 包含函數主體的表達式 ,可以使用await
返回值: 一個全新的promise,這個promise要么會通過一個由async函數返回的值被解決,要么會通過一個從async函數中拋出的(或其中沒有被捕獲到的)異常被拒絕
下面為async的具體使用實例:
async function foo(p) { console.log("foo run",p); return 1; } var res = foo(1); console.log(res);//{<fulfilled>: 1}
async函數一定會返回一個promise對象。如果一個async函數的返回值看起來不是promise,那么它將會被隱式地包裝在一個promise中。
例如,如下代碼:
async function foo() { //promise.[[promiseValue]] return 1 } //等價于 function foo() { return Promise.resolve(1) }//{<fulfilled>: 1}
下面是對async的一些補充:
async 本身是一個語法糖—>語法糖:帶有一定功能的關鍵字
語法糖的作用:能夠減少代碼量、增加程序的可讀性,從而減少程序代碼出錯的機會
通過 promise.then-cb 形參獲取
async function foo(){ console.log(222222); return 123; } let res = foo(); res.then(data=>{ console.log(data);//123 })
第二種接受函數返回值的方式是 await
(async function (){ console.log('async run'); //第二種接受函數返回值的方式是 await let res = await foo(); console.log(res); })() async function foo(){ console.log('foo run'); return 123; } //res作用:接受 async foo函數返回值 是promise let res = foo();
await 的意思是等待,所以應該很好理解,await 等待某個操作完成。
await關鍵字的作用 就是獲取 Promise中返回的內容, 獲取的是Promise函數中resolve或者reject的值(await 作用是獲取promise.[[promiseValue]]的值)
await 必須寫在 async 中
await 后是一個promise實例對象
[[PromiseValue]]是個內部變量,外部無法得到,只能在then中獲取。
async函數的return
new promise 中 resolve實參
then 中 return (catch finally 中的return)
promise.reslove()實參 promise.reject()實參
promise和 async/await都是解決異步編程的一種方式,但是async/await使得異步代碼看起來像同步代碼。
函數前面多了一個async關鍵字。await關鍵字只能用于async定于的函數內。async函數會隱式地返回一個Promise,該promise的resolve值就是return的值。
使用async函數可以讓代碼簡潔很多,不需要像Promise一樣需要then,不需要寫匿名函數處理Promise的resolve的值,也不需要定義多余的data變量,還避免了嵌套代碼。
async/await 讓 try/catch可以同時處理同步和異步的錯誤。在下面的示例中,try/catch不能處理JSON.parse的錯誤,因為它在Promise中,我們需要使用.catch,這樣的錯誤會顯得代碼非常的冗余。
關于“async、await和promise的區別是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。