JavaScript Async Await 完全指南

JavaScript 2025-01-01T06:00:00.000Z

JavaScript Async Await 完全指南

Async/Await 讓非同步程式碼看起來像同步程式碼,大幅提升可讀性。但若缺乏深入理解,反而容易寫出效能低落的程式。

基礎語法

async function fetchUser(id) {
  const response = await fetch(`/api/users/${id}`);
  const user = await response.json();
  return user;
}

async 函式永遠回傳 Promise,即使你回傳的是普通值。

錯誤處理

async function getUserData(id) {
  try {
    const user = await fetchUser(id);
    return { success: true, data: user };
  } catch (error) {
    return { success: false, error: error.message };
  }
}

常見效能陷阱

串行執行(慢)

const users = await fetchUsers();
const posts = await fetchPosts();

並行執行(快)

const [users, posts] = await Promise.all([fetchUsers(), fetchPosts()]);

進階模式

Promise.allSettled

const results = await Promise.allSettled([fetchUser(1), fetchUser(2), fetchUser(3)]);
const successful = results.filter(r => r.status === 'fulfilled').map(r => r.value);

超時控制

function withTimeout(promise, ms) {
  const timeout = new Promise((_, reject) =>
    setTimeout(() => reject(new Error('Timeout')), ms)
  );
  return Promise.race([promise, timeout]);
}