JavaScript Promises
یک Promise نشاندهنده نتیجه یک وظیفه (task) ناهمگام (asynchronous) است.
شما از Promiseها برای فراخوانیهای API، پرسوجوهای پایگاه داده (database queries) و خواندن فایل استفاده میکنید.
یک Promise دارای سه حالت است:
- Pending: وظیفه هنوز در حال اجرا است.
- Fulfilled: وظیفه با موفقیت به پایان رسید.
- Rejected: وظیفه با خطا مواجه شد.
ساختار آن به این صورت است:
const promise = new Promise((resolve, reject) => { // The executor runs immediately });
شما نتایج را با این متدها مدیریت میکنید:
- .then(): زمانی که promise با موفقیت انجام شود، اجرا میشود.
- .catch(): زمانی که promise با خطا مواجه شود، اجرا میشود.
- .finally(): زمانی که وظیفه تمام شود (صرفنظر از نتیجه)، اجرا میشود.
قوانین مهمی که باید به خاطر بسپارید:
- اولین نتیجه برنده است. اگر ابتدا resolve() و سپس reject() را فراخوانی کنید، resolve برنده میشود.
- تابع executor به صورت همگام (synchronously) اجرا میشود.
- استفاده از async و await خوانایی کد شما را نسبت به استفاده از .then() بیشتر میکند.
مدیریت چندین promise:
- Promise.all(): این متد از رویکرد fail-fast پیروی میکند. اگر یک promise با خطا مواجه شود، کل گروه با خطا مواجه میشود.
- Promise.allSettled(): این متد منتظر میماند تا تمام promiseها تمام شوند. این متد نتایج را حتی اگر برخی وظایف با خطا مواجه شوند، برمیگرداند.
خلاصه:
- Promise: یک مدیریتکننده نتیجه ناهمگام.
- resolve: نشاندهنده موفقیت.
- reject: نشاندهنده شکست.
- async/await: روشی تمیزتر برای نوشتن promiseها.
- Promise.all: در اولین خطا متوقف میشود.
- Promise.allSettled: تمام وظایف را به پایان میرساند.
