Async/await是JavaScript中處理異步操作的另一種方法,它建立在'Promise'的基礎之上。他提供了一種更直觀、更類似於同步代碼的寫法來處理異步操作。
1.async/await本質上就是更容易閱讀和編寫的'Promise'。
2.async:每個'async'數都會自動地返回一個'Promise',就算沒有顯式的返回'Promise',他也會自動將其封裝成為'Promise'。
3.await:用來等待一個Promise被解析(fulfilled)或拒絕。當await遇到一個Promise,他會暫停自己的執行,直到該Promise被解決為止。要注意的地方是,await只能用在async函數內。
async function fetchData() {
console.log('Start fetching data');
// 輸出:Start fetching data
let response = await new Promise(resolve => {
setTimeout(() => {
resolve('Data fetched');
}, 2000);
});
console.log(response);
// 輸出:Data fetched (2秒後)
console.log('End fetching data');
// 輸出:End fetching data
}
console.log('Before async call');
// 輸出:Before async call
fetchData();
console.log('After async call');
// 輸出:After async call
```
輸出順序:
1.Before async call(同步代碼,直接執行)
2.Start fetching data(fetchData是異步函數,但同步部分先執行)
3.After async call(同步代碼,立即執行,因為 fetchData是異步的)
4.Data fetched(2 秒後,Promise 被解析,await暫停的部分繼續執行)
5.End fetching data(最後執行,因為等Promise解析完成後才繼續)
4.並行操作:對於多個獨立的異步操作,可以使用 Promise.all()來並行執行:
async function fetchMultipleData() {
const [result1, result2] = await Promise.all([
fetchData1(),
fetchData2()
]);
console.log(result1, result2);
}
5.也可以使用for...of執行一步操作:
async function processArray(array) {
for (const item of array) {
await processItem(item);
}
}