摘要:帶來了和,讓的異步編程更加方便。但是他們是取代不了的。其中狀態(tài)是這種情況下,看出狀態(tài)是。并報(bào)錯(cuò),不想報(bào)錯(cuò)紅錯(cuò),可以使用將報(bào)錯(cuò)信息到。,簡介是用來表示函數(shù)是異步的,出現(xiàn),會(huì)返回一個(gè)對象,就可以使用方法,方便的添加回調(diào)函數(shù)了。
ES7帶來了async和await,讓js的異步編程更加方便。
async和await的簡單語法實(shí)驗(yàn)async和await是Promise的語法糖,讓書寫更加方便。但是他們是取代不了Promise的。他們是建立在promise機(jī)制上的。
簡單語法試驗(yàn):
(1)
正常情況下,可以看出也打印出來一個(gè)Promise。其中Promise狀態(tài)是‘resolved’;
(2)
這種情況下,看出Promise狀態(tài)是"rejected"。并報(bào)錯(cuò),不想報(bào)錯(cuò)“紅錯(cuò)”,可以使用try...catch
(3)
將報(bào)錯(cuò)信息catch到。
async
async是用來表示函數(shù)是異步的,出現(xiàn)async,會(huì)返回一個(gè)Promise對象,就可以使用then方法,方便的添加回調(diào)函數(shù)了。是語法更加簡潔。
await
必須出現(xiàn)在async中,不可多帶帶使用;
await后面可以跟任何js表達(dá)式,也就是awati可以等很多類型的東西,但主要是等Promise對象被狀態(tài)被resolved。
注意:reject("123"),需要try,catch才能將信息拿出來。
例子:
(1)resolve正常情況下可以拿出。
(2)reject拿不出
(3)reject需要用try,catch獲取信息
如:
function aa(second){
return new Promise((resolve,reject) => { setTimeout(() => { resolve("request done"+Math.random()); },second); })
}
async function bugDemo(){
await aa(1000); await aa(1000); await aa(1000); console.log("clear the loading~");
}
bugDemo();
不阻塞的寫法
function aa(second){
return new Promise((resolve,reject) => { setTimeout(() => { console.log("request done"+Math.random()); },second); })
}
async function bugDemo(){
let a =aa(1000); let b =aa(1000); let c =aa(1000); await Promise.all([a,b,c]) console.log("clear the loading~");
}
bugDemo();
注意:await只能在async函數(shù)的上下文中。
async function forDemo(){
let arr = [1,2,3,4,5]; for(let i=0;iawait arr[i];
}
}
這個(gè)是正常的,不會(huì)報(bào)錯(cuò)。async function forBugDemo(){
let arr = [1,2,3,4,5];
arr.forEach(item => {
await item;
});
}
這個(gè)會(huì)報(bào)錯(cuò)
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108294.html
摘要:異步編程三座大山原型原型鏈作用域閉包同步異步。異步操作執(zhí)行完畢后,再執(zhí)行該回調(diào)函數(shù),確保回調(diào)在異步操作之后執(zhí)行。回調(diào)函數(shù)本身是我們約定俗成的一種叫法,我們定義它,但是并不會(huì)自己去執(zhí)行它,它最終被其他人執(zhí)行了。 JS異步編程 JS三座大山:原型原型鏈、作用域閉包、同步異步。之前有寫過自己對閉包的理解,今天來總結(jié)一下JS中的異步。 思考(案例來自stackoverflow): functi...
摘要:有兩個(gè)陌生的關(guān)鍵字,同時(shí)函數(shù)執(zhí)行結(jié)果似乎返回了一個(gè)對象。用來表示函數(shù)是異步的,定義的函數(shù)會(huì)返回一個(gè)對象,可以使用方法添加回調(diào)函數(shù)。如果的是對象會(huì)造成異步函數(shù)停止執(zhí)行并且等待的解決如果等的是正常的表達(dá)式則立即執(zhí)行。 視頻講解 關(guān)于異步處理,ES5的回調(diào)使我們陷入地獄,ES6的Promise使我們脫離魔障,終于、ES7的async-await帶我們走向光明。今天就來學(xué)習(xí)一下 async-a...
摘要:在中,表示抽象的非阻塞異步執(zhí)行。在完成之后安排代碼的唯一方式是通過方法綁定回調(diào)函數(shù)。下圖描述了該示例的計(jì)算過程方法中綁定的回調(diào)函數(shù)只有當(dāng)成功的時(shí)候才會(huì)調(diào)用。為了處理失敗的,需要通過綁定另一個(gè)回調(diào)函數(shù)。 介紹 ES7中,async/await 語法使異步promise的協(xié)調(diào)變得很簡單。如果你需要以特定順序異步獲取來自多個(gè)數(shù)據(jù)庫或API的數(shù)據(jù),可以使用雜亂的promise或回調(diào)函數(shù)。asy...
摘要:標(biāo)準(zhǔn)引入了函數(shù),使得異步操作變得更加方便。在異步處理上,函數(shù)就是函數(shù)的語法糖。在實(shí)際項(xiàng)目中,錯(cuò)誤處理邏輯可能會(huì)很復(fù)雜,這會(huì)導(dǎo)致冗余的代碼。的出現(xiàn)使得就可以捕獲同步和異步的錯(cuò)誤。如果有錯(cuò)誤或者不嚴(yán)謹(jǐn)?shù)牡胤剑垊?wù)必給予指正,十分感謝。 async ES2017 標(biāo)準(zhǔn)引入了 async 函數(shù),使得異步操作變得更加方便。 在異步處理上,async 函數(shù)就是 Generator 函數(shù)的語法糖。 ...
摘要:取而代之,利用事件循環(huán)體系,使用了一種類似語法的工作方式一旦非阻塞的異步操作完成之后,就可以讓開發(fā)者分配的回調(diào)函數(shù)被觸發(fā)。第一個(gè)嘗試嵌套的回調(diào)函數(shù)下面是使用嵌套的回調(diào)函數(shù)的實(shí)現(xiàn)方法這可能對于任何使用者來說再熟悉不過了。 寫在文章前 這篇文章翻譯自 ASYNC/AWAIT WILL MAKE YOUR CODE SIMPLER,這是一篇寫于2017年八月的文章,并由某專欄提名為17年十大...
閱讀 2652·2021-09-09 09:33
閱讀 2810·2019-08-30 15:54
閱讀 2867·2019-08-30 14:21
閱讀 2356·2019-08-29 17:15
閱讀 3579·2019-08-29 16:13
閱讀 2758·2019-08-29 14:21
閱讀 3421·2019-08-26 13:25
閱讀 2028·2019-08-26 12:14