أنماط التزامن (all/settled/race) وأنواعها
نمذج التزامن باستخدام Promise.all / allSettled / race، وافهم أنواع نتائجها، وأنشئ دوال مساعدة آمنة.
أنماط التزامن (all/settled/race) وأنواعها درس مجاني في TypeScript Academy على CoddyKit. هذا هو الدرس 3 من أصل 3. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في TypeScript Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
مقدمة
الهدف: تشغيل المهام بشكل متزامن باستخدام Promise.all، ومعالجة النتائج المختلطة باستخدام allSettled، واستخدام race للمهلات الزمنية والبدائل الاحتياطية. تعرّف على الأنواع التي يعيدها كل منها.
all: أنواع tuple
يحافظ Promise.all مع tuple على أنواع العناصر وترتيبها؛ إذ تُنتظر كل قيمة ويُستخرج نوعها الداخلي.
async function one(): Promise<number> { return 1 }
async function two(): Promise<string> { return "two" }
async function runAll() {
const [a, b] = await Promise.all([one(), two()]);
// a: number, b: string
console.log(a + 1, b.toUpperCase());
}
runAll();all: التعيين المتزامن
ابدأ عدة مهام أولًا، ثم استخدم await لانتظارها معًا. ينتج Promise.all قيمة من النوع string[] هنا.
async function fetchItem(id: number): Promise<string> {
return `item-${id}`;
}
async function getMany(ids: number[]): Promise<string[]> {
const tasks = ids.map(id => fetchItem(id)); // start all
return Promise.all(tasks); // await all
}
getMany([1,2,3]).then(xs => console.log(xs));كتابة نوع allSettled
لا يرفض allSettled أبدًا؛ بل يحل إلى مصفوفة من كائنات النتائج fulfilled أو rejected التي يمكنك تضييقها باستخدام status.
async function mightFail(n: number): Promise<number> {
if (n % 2 === 0) return n; else throw new Error("odd")
}
async function runSettled() {
const results = await Promise.allSettled([mightFail(1), mightFail(2)]);
for (const r of results) {
if (r.status === "fulfilled") {
// r: PromiseFulfilledResult<number>
console.log("ok", r.value);
} else {
// r: PromiseRejectedResult
console.warn("fail", r.reason);
}
}
}
runSettled();race + مهلة زمنية
يُحل race أو يُرفض باستخدام الوعد الأول الذي يستقر. ادمجه مع مهلة زمنية للحد من زمن الاستجابة.
function timeout<T>(ms: number, msg = "Timeout"): Promise<T> {
return new Promise((_, reject) => setTimeout(() => reject(new Error(msg)), ms));
}
async function slow(): Promise<string> { return new Promise(res => setTimeout(() => res("done"), 100)); }
async function withTimeout() {
const result = await Promise.race<Promise<string>>([
slow(),
timeout<string>(50, "Too slow"),
]);
console.log(result);
}
withTimeout().catch(e => console.error("raced:", e.message));نصائح واختيارات
نصائح:
- all: جمع النتائج مع إيقاف سريع عند الفشل.
- allSettled: جمع حالات النجاح والأخطاء من دون إطلاق استثناء.
- race: للمهلات الزمنية والبدائل الاحتياطية؛ حدّد أنواع العناصر بوضوح.
التحقق من كتابة نوع Promise.all
تحقق سريع: أي عبارة حول كتابة نوع Promise.all صحيحة؟
مراجعة
مراجعة: استخدم all للتنفيذ المتوازي مع الحفاظ على الأنواع، وallSettled لفحص جميع النتائج، وrace للمهلات الزمنية، وتعرّف على الأشكال التي تعيدها كل واجهة برمجية.
الأسئلة الشائعة
هل درس «أنماط التزامن (all/settled/race) وأنواعها» مجاني؟
نعم — نص درس «أنماط التزامن (all/settled/race) وأنواعها» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة TypeScript Academy، انتقل إلى CoddyKit PRO. تتضمن دورة TypeScript Academy 3 دروس في المجموع.
ماذا ستتعلم في «أنماط التزامن (all/settled/race) وأنواعها»؟
نمذج التزامن باستخدام Promise.all / allSettled / race، وافهم أنواع نتائجها، وأنشئ دوال مساعدة آمنة. تتمرن على TypeScript Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ TypeScript Academy؟
لا تُشترط خبرة سابقة. TypeScript Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 3.
كم من الوقت يستغرق درس «أنماط التزامن (all/settled/race) وأنواعها»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس TypeScript Academy هذا؟
نعم. كل درس في TypeScript Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- Promise وكتابة async/await
- كتابة الأخطاء (unknown) وتضييق النطاق في catch
- أنماط التزامن (all/settled/race) وأنواعها