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: تمام وظایف را به پایان می‌رساند.

منبع: https://dev.to/malik786/javascript-promises-2hn4