ES6中Async的使用

1.async基本用法

async會返回一個promise對象
// 運行async函數,每次執行完一個await後的語句 就會先撤出去執行外部的代碼。
async function asyncFunc(){
    await console.log('第1行代碼');
    await console.log("第2行代碼");
    await console.log("第3行代碼");
}
asyncFunc().then(function(){
    console.log("async函數執行完畢")
});
new Promise(function(resolve){
    console.log("Promise中的代碼")
    resolve()
}).then(function(){
    console.log("Promise中then中的代碼")
})
console.log("同步代碼")

// 第1行代碼
// Promise中的代碼
// 同步代碼
// 第2行代碼
// Promise中then中的代碼
// 第3行代碼
// async函數執行完畢

// 執行過程:
// 第一輪:進入async執行一個await輸出"第一行代碼" ->
//        new Promise(function(){這裏是同步代碼} then裏面纔是異步的   所以先輸出 "Promise中的代碼" ->
//       然後直接輸出"同步代碼" ->
// 此時同步代碼已全部執行完畢 接下去就是異步代碼輪着執行
// 第二輪: 進入async執行第二個await 輸出:"第二行代碼" ->
//        然後執行then中的異步代碼 輸出:"Promise中then中的代碼" ->
// 第三輪: 進入async執行第三個await 輸出:"第三行代碼" ->
//        這時async中代碼執行完畢並且外部也沒有代碼要執行了 然後調用then()方法
//        輸出:"async執行完畢"
// 大致的流程就是這樣 想學好async 最好了解一下同步異步以及宏任務、微任務等

2. async語法

2.1 async函數中的返回值會作爲then方法的參數
async function func1(){
	return "Hello World"
}
func1().then(result=>{
	console.log(result);  // "Hello World"
})
2.2 async內部拋出異常 會直接導致promise對象編程reject狀態 然後異常會被catch捕獲
async function func2(){
	throw new Error("異常發生");
}
func2().catch(error=>console.log(error)); //Error: 異常發生
2.3 Promise對象的狀態變化
// 默認情況下 當async中的代碼執行完畢 async返回的promise變爲resolve狀態
// 如果中途碰到return則會直接返回並且promise對象變爲resolve
// 如果中途拋出異常,則直接返回,promise對象變爲reject

3. async中出現異常

// 無論哪一個await出現了異常 都會使整個async函數終止並且返回的promise對象變爲reject狀態 
// 或者說有一個await後面的promise對象是reject狀態 都會使async函數終止並使promise變爲reject
// 如果希望async繼續運行下去,那麼可以使用try...catch...包裹起來 也可以直接在await後面的promise對象後面添加.catch() 讓它自己捕獲
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章