DanLevy.net

تصور الوعود

اخترق الحواجز...

Hero image for تصور الوعود

لتصور كيفية تنفيذ الـ Promises، دعنا نعرف دالة جديدة delay(millisecs).

function delay(millisecs) {
return new Promise(resolve => {
setTimeout(() => resolve(millisecs), millisecs);
});
}

هذه دالة مساعدة ستُحل (resolve) بمجرد انتهاء المهلة.

سيتم تمرير التأخير بالميلي ثانية إلى دالة الاستدعاء الخاصة بـ .then.

دعنا نلقي نظرة على 4 أمثلة (مع خطوط زمنية متحركة).

مثال 1/4

يوضح هذا كيف يتأخر تنفيذ console.log() بواسطة delay(msec).

delay(1000).then(() => console.log("done"));

خط زمني يظهر تأخير 1000 ثم تشغيل console.log بعد ثانية واحدة

مثال 2/4

هذا يوضح خطأ شائعًا.

يتم تشغيل console.log فور بدء delay(1000)، وليس بعد التأخير كما كنت تريد على الأرجح.

لأن console.log يُرجع undefined، يتم تجاهل .then() بصمت.

لاحظ الفرق بين typeof console.log === 'function' و typeof console.log() === undefined.

بشكل عام، الاستخدام المطلوب لـ console.log موضح في المثال رقم 1. تأكد من تمرير دوال إلى .then و .catch.

delay(1000).then(console.log("done"));

خط زمني يظهر تشغيل console.log فورًا قبل انتهاء التأخير

مثال 3/4

يتم تنفيذ 3 وعود (Promises) في وقت واحد.

delay(1000).then(console.log);
delay(2000).then(console.log);
delay(3000).then(console.log);

خط زمني يظهر ثلاثة وعود تأخير تتحقق بعد ثانية وثانيتين وثلاث ثوان

مثال #4/4

Promise.all مع 3 وعود delay. سيتم تنفيذها بشكل متزامن.

Promise.all([delay(1000), delay(2000), delay(3000)]).then(console.log);

مخطط زمني يوضح Promise.all وهي تنتظر جميع وعود التأخير الثلاثة

إسناد: