Lab: Fetch API Data
Lab: Fetch API Data
Section titled “Lab: Fetch API Data”ใน lab นี้คุณจะดึงข้อมูลจาก public API จริง แล้วจัดการทั้ง success และ error cases
-
Fetch users
เขียน async function
getUsers()ที่ดึงข้อมูลจากhttps://jsonplaceholder.typicode.com/usersแล้ว return array ของ users โดยต้องเช็คresponse.ok -
Fetch user by ID พร้อม error handling
เขียน
getUserById(id)ที่:- ดึงข้อมูลจาก
/users/${id} - throw
Errorถ้า response ไม่ ok - ใช้ try/catch เมื่อเรียกใช้ function
- ดึงข้อมูลจาก
-
Fetch หลาย resources พร้อมกัน
ใช้
Promise.allดึง users และ posts พร้อมกัน แล้ว log จำนวนของแต่ละอัน -
สร้าง resilient fetcher
เขียน
safeFetch(url)ที่:- ดึงข้อมูลจาก url ที่ให้มา
- ถ้า error ให้ return
{ data: null, error: error.message } - ถ้าสำเร็จ ให้ return
{ data: ..., error: null }
Solution
Section titled “Solution”Show Solution
Step 1: Fetch users
async function getUsers() { const response = await fetch("https://jsonplaceholder.typicode.com/users");
if (!response.ok) { throw new Error(`HTTP ${response.status}: ${response.statusText}`); }
return await response.json();}
// เรียกใช้const users = await getUsers();console.log(`Total users: ${users.length}`); // 10console.log(users.map(u => u.name));Step 2: getUserById
async function getUserById(id) { const response = await fetch( `https://jsonplaceholder.typicode.com/users/${id}` );
if (!response.ok) { throw new Error(`User #${id} not found (HTTP ${response.status})`); }
return await response.json();}
// ใช้กับ try/catchtry { const user = await getUserById(1); console.log(`Found: ${user.name} (${user.email})`);} catch (error) { console.error("Error:", error.message);}
// ทดสอบกับ ID ที่ไม่มีtry { const user = await getUserById(999);} catch (error) { console.error("Error:", error.message);}Step 3: Promise.all
const [allUsers, allPosts] = await Promise.all([ fetch("https://jsonplaceholder.typicode.com/users").then(r => r.json()), fetch("https://jsonplaceholder.typicode.com/posts").then(r => r.json()),]);
console.log(`Users: ${allUsers.length}`); // 10console.log(`Posts: ${allPosts.length}`); // 100Step 4: safeFetch
async function safeFetch(url) { try { const response = await fetch(url);
if (!response.ok) { throw new Error(`HTTP ${response.status}`); }
const data = await response.json(); return { data, error: null }; } catch (error) { return { data: null, error: error.message }; }}
// ทดสอบ successconst result1 = await safeFetch("https://jsonplaceholder.typicode.com/users/1");console.log(result1); // { data: { id: 1, ... }, error: null }
// ทดสอบ failureconst result2 = await safeFetch("https://invalid-url.example.com");console.log(result2); // { data: null, error: "..." }