JavaScript 中階
Promise 是什麼?有什麼用途?
什麼是 Promise?
Promise 是 JavaScript 中用來處理非同步操作的物件,代表一個**尚未完成但最終會完成(或失敗)**的操作。它解決了「回調地獄(Callback Hell)」的問題。
三種狀態
| 狀態 | 說明 |
|---|---|
| Pending(等待中) | 初始狀態,操作尚未完成 |
| Fulfilled(已完成) | 操作成功,有回傳值 |
| Rejected(已拒絕) | 操作失敗,有錯誤原因 |
狀態一旦改變就不可逆。
基本用法
// 建立 Promise
const promise = new Promise((resolve, reject) => {
setTimeout(() => {
const success = true;
if (success) {
resolve('操作成功!');
} else {
reject(new Error('操作失敗!'));
}
}, 1000);
});
// 使用 Promise
promise
.then(result => console.log(result)) // '操作成功!'
.catch(error => console.error(error))
.finally(() => console.log('完成'));
Promise 鏈(Promise Chaining)
fetch('/api/user')
.then(res => res.json())
.then(user => fetch('/api/posts?userId=' + user.id))
.then(res => res.json())
.then(posts => console.log(posts))
.catch(err => console.error(err));
async/await(語法糖)
async function loadData() {
try {
const res = await fetch('/api/user');
const user = await res.json();
console.log(user);
} catch (err) {
console.error(err);
}
}
常用靜態方法
| 方法 | 說明 |
|---|---|
Promise.all() |
全部成功才 resolve,任一失敗則 reject |
Promise.race() |
最快完成(不論成敗)的結果 |
Promise.allSettled() |
等待全部完成,不管成功或失敗 |
Promise.any() |
任一成功即 resolve |
✦ AI 模擬面試
輸入你的答案,AI 即時分析精準度與改進空間
登入後即可使用 AI 評分
