Promise 在處理後續是用 then()、catch() 方法來去做連接,但如果要處理的東西變多,就會導致整體程式碼被拉的很長,因此就延伸出了 async/await 這一個概念,讓整體程式碼變得更扁平,一目了然。
假設有一個 Promise 的 function 如下:
function promise(number) {
return new Promise((resolve, reject) => {
number > 0 ? resolve("成功") : reject("失敗")
});
}
而以下是用 async/await 的方式寫的程式碼:
async function getNumber() {
const num1 = await promise(1);
const num2 = await promise(2);
console.log(num1, num2);
}
這裡我們會比較 then/catch 和 async/await 兩者在使用上面的區別,讓大家對於其結構差異有大致的了解。以下皆是以上面 Promise 的 function 下去寫的:
promise(1).then(result => {
console.log(result);
return promise(2);
}.then(result => {
console.log(result);
}
async function getNumber() {
const num1 = await promise(1);
const num2 = await promise(2);
console.log(num1, num2);
}
經過這兩種的方法比較後可以發現,async/await 的寫法相較於 then/catch 的寫法結構更加清楚明瞭。
以上我們沒有講到如果用 await/async 寫的話,遇到錯誤要怎麼處理,在 then/catch 寫法中,我們只要使用catch 就可以解決,而在 await/async 中是使用 try/catch 來解決此問題,以下為示範:
async function getNumber() {
try {
const num1 = await promise(1);
const num2 = await promise(2);
console.log(num1, num2);
} catch(error) {
console.log(error);
}
}
使用 try/catch 後就可以解決如果遇到執行失敗時要怎麼辦。