Promise<T> และการกำหนดชนิดข้อมูล async/await
ทำความเข้าใจโครงสร้าง Promise กำหนดชนิดข้อมูลให้ฟังก์ชัน async และทำงานกับค่าที่รอผลแล้วอย่างปลอดภัย
Promise<T> และการกำหนดชนิดข้อมูล async/await เป็นบทเรียน TypeScript Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน TypeScript Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
บทนำ
เป้าหมาย: อ่านและเขียนโค้ดที่ใช้ Promise<T> คุณจะกำหนดชนิดให้ฟังก์ชัน async รอค่า และรักษาชนิดของข้อผิดพลาดไว้
พื้นฐาน Promise
Promise<T> ใช้ห่อค่าที่จะได้รับในภายหลัง ใช้ Promise เมื่อไม่มีค่าที่ได้รับการแก้ไข
function delay(ms: number): Promise<void> {
return new Promise(resolve => setTimeout(resolve, ms));
}
const p: Promise<void> = delay(100);
p.then(() => console.log("done"));การระบุชนิดค่าที่ส่งกลับของ async
ฟังก์ชัน async จะส่งกลับ Promise<U> เสมอ ภายในฟังก์ชันจะ ส่งกลับ U และ TS จะห่อค่าให้โดยอัตโนมัติ
async function fetchNumber(): Promise<number> {
await delay(10);
return 42; // inferred as Promise<number>
}
fetchNumber().then(n => console.log(n.toFixed(0)));การระบุชนิดของ await
await จะแกะค่าออกจาก Promise และให้ชนิดข้อมูลภายใน เช่น string ในที่นี้ ทำให้คุณได้รับ IntelliSense ที่ถูกต้อง
async function readUserName(id: number): Promise<string> {
await delay(5);
return `user-${id}`;
}
async function main(): Promise<void> {
const name = await readUserName(7); // name: string
console.log(name.toUpperCase());
}
main();การระบุชนิดของ Promise.all
Promise.all จะรักษาชนิดของทูเพิลไว้ และรอแต่ละองค์ประกอบจนได้ชนิดข้อมูลภายในให้คุณ
async function both() {
const [n, s] = await Promise.all([
fetchNumber(),
readUserName(1),
]);
console.log(n, s);
}
both();การระบุชนิดของข้อผิดพลาด
ในบล็อก catch ควรเริ่มด้วย unknown จากนั้นจำกัดชนิดด้วย instanceof Error หรือการตรวจสอบแบบกำหนดเอง ก่อนเข้าถึงฟิลด์ต่าง ๆ
async function safe() {
try {
await delay(1);
throw new Error("boom");
} catch (e: unknown) {
if (e instanceof Error) {
console.error("Handled:", e.message);
} else {
console.error("Unknown error", e);
}
}
}
safe();ตรวจสอบชนิดค่าที่ async ส่งกลับ
ตรวจสอบอย่างรวดเร็ว: ฟังก์ชัน async ที่ส่งกลับค่าชนิด U จะมีชนิดค่าที่ส่งกลับเป็นอะไร
สรุป
สรุป: Promise<T> ใช้ห่อค่าที่จะได้รับภายหลัง ฟังก์ชัน async ส่งกลับ Promise<U> ส่วน await จะแกะชนิดข้อมูลออก และข้อผิดพลาดใน catch ควรเริ่มต้นเป็น unknown
คำถามที่พบบ่อย
บทเรียน “Promise<T> และการกำหนดชนิดข้อมูล async/await” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “Promise<T> และการกำหนดชนิดข้อมูล async/await” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส TypeScript Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส TypeScript Academy มีบทเรียนทั้งหมด 3 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “Promise<T> และการกำหนดชนิดข้อมูล async/await”
ทำความเข้าใจโครงสร้าง Promise กำหนดชนิดข้อมูลให้ฟังก์ชัน async และทำงานกับค่าที่รอผลแล้วอย่างปลอดภัย คุณปฏิบัติ TypeScript Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน TypeScript Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน TypeScript Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 3 บทเรียน
บทเรียน “Promise<T> และการกำหนดชนิดข้อมูล async/await” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน TypeScript Academy นี้ได้ไหม
ได้ บทเรียน TypeScript Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- Promise และการกำหนดชนิดข้อมูล async/await
- การกำหนดชนิดข้อมูลข้อผิดพลาด (unknown) และการจำกัดชนิดข้อมูลใน catch
- รูปแบบการทำงานพร้อมกัน (all/settled/race) และชนิดข้อมูล