一、async/await基礎語法
在Node.Js編程中,async關鍵字用于定義異步函數,這個異步函數執行完會返回一個Promise對象,異步函數的內部可以使用await關鍵字來暫停當前代碼的繼續執行,直到Promise操作完成。
在用法上,async關鍵字主要用于聲明一個異步函數,await關鍵字主要用于等待Promise操作的返回結果,若await等待的Promise操作被rejected,此時會拋出異常,需要對異常采用"try/catch"處理。
async/await的語法格式:
async function() {await [Asynchronous Action]}
async/await代碼樣例:
1.等待Promise執行結果,并利用try/catch捕獲異常
//定義異步函數
async function fetchData() {try {//異步操作,從API獲取數據//使用await等待函數執行完成const response = await fetch('https://test.com/');const data = await response.json();console.log('The data is:', data);} catch (error) {console.error('Err occured:', error);}
}//調用異步函數
fetchData();
2.async時序測試
async function async1() {console.log('async1 start');await async2();console.log('async1 end'); }
async function async2() {console.log('async2 finish'); }
console.log('script start');
async1();
console.log('script end');
運行結果:
script start
async1 start
async2 finish
script end
async1 end
二、async/await和Promise的關系
1.async/await的語法是基于Promise來實現的。
2.async/await對Promise進行了封裝,異步編程時避免了繁瑣的Promise鏈式調用。
3.async/await的設計是為了簡化Promise異步編程的實現方式,代碼可讀性更強。
4.async/await基于Promise增加了對執行步驟的控制,可以通過await來暫停/恢復執行。
基于Promise實現的異步操作:
fetchData().then(data => process(data)).then(result => save(result)).catch(err => console.error(err));
基于async/await實現的異步操作:
try {const data = await fetchData();const result = await process(data);await save(result);
} catch (err) {console.error(err);
}
以上代碼實現中,基于".then"實現的連續操作會讓每一個步驟立即執行,基于await實現的連續操作可以讓當前步驟暫停等待。
以下兩段代碼的實現效果相同:
Demo