پیشنهاد Promise.allKeyed به مرحلهی ۳ رسید
خلاصهٔ کاملتر
پیشنهاد «Await Dictionary of Promises» تو TC39 به مرحلهی ۳ رسیده. تو متن پیشنهاد اومده که مشکل از جایی شروع میشه که آدم چند تا await رو پشت سر هم داخل یه شیء مینویسه؛ اونوقت درخواستها آبشاری اجرا میشن و بهجای اینکه با هم برن، هرکدوم منتظر قبلی میمونه.
راهحل فعلی یعنی Promise.all موازیسازی رو حل میکنه ولی بر پایهی ترتیبه نه اسم؛ کافیه ترتیب آرایهی ورودی با ترتیب مقصد یکی نباشه تا مقدارها جابهجا بشن. نویسندهها میگن الگوی سوم — یعنی نگهداشتن پرامیسها تو متغیرهای جدا و بعد await کردنشون — هم پرحرفه و هم یه ریسک داره: اگه اولی خطا بده، به بقیه هندلری وصل نشده و یه unhandled rejection بهجا میمونه که رو بعضی سیستمها کل پروسه رو میبنده.
پیشنهاد یه متد تازه اضافه میکنه که بهجای آرایه، یه دیکشنری از پرامیسها میگیره و نتیجه رو با همون کلیدها برمیگردونه:
const {
shape,
color,
mass,
} = await Promise.allKeyed({
shape: getShape(),
color: getColor(),
mass: getMass(),
});نسخهی دوم یعنی Promise.allSettledKeyed همین کارو برای کاربرهای Promise.allSettled انجام میده و برای هر کلید یه شیء با status و value یا reason میده.
تو بخش گزینههای بررسیشده اومده که اسمهای دیگهای مثل Promise.ownProperties و Promise.fromEntries و حتی اورلود کردن خود Promise.all هم مطرح بوده. اورلود رو رد کردن، چون شکل خروجی به شکل ورودی وابسته میشه و اشتباه رایج پاس دادن چند آرگومان بهجای آرایه دیگه خطا نمیده. سینتکس اختصاصی به سبک Swift هم بررسی شده ولی انتخاب نشده؛ نامگذاری allKeyed عمداً همشکل پیشنهاد Joint Iteration انتخاب شده.
این متد فقط کلیدهای خودِ شیء رو میخونه، مثل Object.keys، ولی برخلاف کتابخونههایی مثل Bluebird.props و p-props، سیمبلهای قابل شمارش رو هم درنظر میگیره — چیزی که بهخاطر کاربرد کم اونها مشکلساز دونسته نشده. فعلاً هیچ پلیفیل یا پیادهسازی نیتیوی وجود نداره.
نکات کلیدی:
- پیشنهاد در مرحلهی ۳ استاندارد TC39
- Promise.allKeyed یه شیء از پرامیسها میگیره و با همون کلیدها برمیگردونه
- جلوی جابهجایی مقدارها بهخاطر ترتیب آرایه رو میگیره
- Promise.allSettledKeyed هم برای حالت settled اضافه میشه
- فعلاً پلیفیل یا پیادهسازی نیتیو نداره




