嗨,終於第十七天了,這次來介紹一下async & await
希望可以利用我目前所理解的,幫助你們能夠有初步的了解
一樣先給我目前理解的懶人包
我們都知道node.js是一個非同步的語言
所以為了解決執行順序的問題,又能控制先後順序,所以透過
async & await 達到 用同步執行順序,達到異步效果
快速初步了解一下吧~
function fn() {
setTimeout(() => {
console.log("異步!");
}, 2000);
console.log('我會先出來');
}
fn();
我們能預期到,如果在正常使用下,他的出現順序會是
在一些異步的動作中,他會放在後面才被執行。
那我們可以透過async await 來掌控他,達到同步的順序,異步的執行
上code
async function fn() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => resolve("不在是異步了,我會先執行!"), 2000)
});
let res = await promise;
console.log(res);
console.log('沒辦法先出來了,我要等上面先出來');
}
fn();
//輸出結果
//等兩秒
//不在是異步了,我會先執行!
//沒辦法先出來了,我要等上面先出來
ok感覺我們已經稍微了解異步的美好了,這邊就有點像PHP由上往下執行了
但還有一個要注意的點,如果我們的狀態是reject呢?
async function fn() {
let promise = new Promise((resolve, reject) => {
setTimeout(() => reject("不在是異步了,我會先執行!"), 2000)
});
let res = await promise;
console.log(res);
console.log('沒辦法先出來了,我要等上面先出來');
}
fn();
你會發現,等了兩秒鐘之後會噴錯~
這是因為await promise被拒絕之後,他沒辦法印出來,你必須用try catch把它包裝起來
所以我們必須補上try catch
async function fn() {
//用Promise包裝setTimeout
let promise = new Promise((resolve, reject) => {
setTimeout(() => reject("這是拒絕結果,會被catach補抓"), 2000)
});
try {
let res = await promise;
console.log(res);
console.log('因為拒絕了,所以這條不會印出來');
} catch (error) {
console.error("reject拒絕在這裡被捕捉:", error);
}
}
fn();
這樣不管結果是resolve 或者是 reject 都沒問題囉
其實還有很多小細節我自己也還在摸索,不過目前大致上用法應該就這樣拉~~
希望這些例子可以幫助到你~