برمجياتقراءة دقيقتين

Firefox 155 يضيف Promise.allKeyed لربط نتائج الـ Promises بأسمائها بدل ترتيبها

المغزى

أشهر خطأ صامت في Promise.all لا يرمي أي error بل يبدّل القيم بهدوء، والدالة الجديدة تزيل سببه بجعل الاسم لا الترتيب هو ما يربط كل نتيجة بمصدرها.

بحسب ملاحظات الإصدار للمطورين على MDN، كان Firefox 155 حتى 28 أغسطس 2026 في مرحلة الـ Beta، وموعد صدوره المستقر 1 سبتمبر 2026. ومن أبرز ما يضيفه دعم الدالتين Promise.allKeyed() وPromise.allSettledKeyed()، وفق اقتراح TC39 المسمى await dictionary، وهو في المرحلة الثالثة (Stage 3).

ولفهم المشكلة التي تعالجها الدالة: تعمل Promise.all بالترتيب. فهي تستقبل array من الـ Promises وتعيد array من النتائج، ويتولى المطور تفكيكها بنفسه، كما في هذا السطر:

const [color, shape, mass] = await Promise.all([getShape(), getColor(), getMass()]);

في هذا المثال ذهبت قيمة الشكل إلى المتغير color، وقيمة اللون إلى shape. والكود يعمل دون أي error، لكن القيم تبادلت أماكنها، وقد لا يُكتشف ذلك إلا في بيئة الإنتاج. وهذا الخطأ شائع إلى حد أن اقتراح TC39 نفسه يستخدمه مثالًا على المشكلة.

أما Promise.allKeyed فتستقبل object وتعيد object بالمفاتيح نفسها:

const { shape, color, mass } = await Promise.allKeyed({ shape: getShape(), color: getColor(), mass: getMass() });

وهنا لم يعد للترتيب أي دور، فالاسم هو ما يربط كل نتيجة بمصدرها.

ووجود الاقتراح في المرحلة الثالثة يعني أنه تجاوز مرحلة التصميم وانتقل إلى التنفيذ في محركات JavaScript، وFirefox أول متصفح يوصله إلى النسخة المستقرة.

ويتضمن الإصدار نفسه تغييرًا في CSS: صارت الدالة attr() تعمل في أي property، لا في content وحدها، فيمكن مثلًا كتابة width: attr(data-size px) دون أي سطر JavaScript.

والمشترك بين الإضافتين أنهما لا تضيفان قدرة جديدة بقدر ما تزيلان سببًا لكتابة كود إضافي، أو لخطأ يصعب رصده.

المصادر

  1. ملاحظات إصدار Firefox 155 للمطورين (ملف المصدر في mdn/content)
  2. الصفحة نفسها على MDN
  3. اقتراح TC39: Await dictionary of Promises
  4. مواعيد إصدارات Firefox
  5. توثيق دالة attr() في CSS

من عدد الجمعة 15 ربيع الأول - 28 أغسطس

أخبار ذات صلة

أخبار الجمعة 15 ربيع الأول - 28 أغسطس