Promise<T> وكتابة async/await
افهم بُنى Promise ، وحدد أنواع الدوال غير المتزامنة، وتعامل مع القيم الناتجة عن await بأمان.
Promise<T> وكتابة async/await درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 1 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
مقدمة
الهدف: قراءة وكتابة التعليمات البرمجية القائمة على Promise<T>. ستحدد أنواع الدوال غير المتزامنة، وتنتظر القيم، وتحافظ على كتابة أنواع الأخطاء.
أساسيات 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 على أنواع tuple؛ إذ تُنتظر كل قيمة ويُستخرج نوعها الداخلي تلقائيًا.
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» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «Promise<T> وكتابة async/await»؟
افهم بُنى Promise ، وحدد أنواع الدوال غير المتزامنة، وتعامل مع القيم الناتجة عن await بأمان. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 3.
كم من الوقت يستغرق درس «Promise<T> وكتابة async/await»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Promise وكتابة async/await
- كتابة الأخطاء (unknown) وتضييق النطاق في catch
- أنماط التزامن (all/settled/race) وأنواعها