تصور الوعود
اخترق الحواجز...
لتصور كيفية تنفيذ الـ 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"));
مثال 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"));
مثال 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);
إسناد:
- المخططات الزمنية المتحركة غير المتزامنة من Patrick Biffle
- مصدر إلهام هذه المقالة: https://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html