مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها

دسته : آموزش رایگان جاوا اسکریپت (JavaScript)

مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها

مفاهیم Promise و چگونگی استفاده از آن در جاوا اسکریپت: راهنمای کامل همراه با مثال‌ها

در دنیای برنامه‌نویسی، مدیریت عملیات‌های ناهم‌زمان یکی از چالش‌های اصلی است. در جاوا اسکریپت، مفهوم Promise (وعده) به شما این امکان را می‌دهد که این عملیات‌های ناهم‌زمان را به شیوه‌ای ساختاریافته و قابل‌فهم مدیریت کنید. در این مقاله، به بررسی مفهوم Promise و نحوه استفاده از آن در جاوا اسکریپت خواهیم پرداخت.

 

مفهوم Promise

یک Promise نماینده یک عملیات ناهم‌زمان است که ممکن است به نتیجه برسد یا با خطا مواجه شود. Promiseها به شما این امکان را می‌دهند که به طور منظم و قابل‌فهم با عملیات‌های ناهم‌زمان تعامل کنید. یک Promise می‌تواند در یکی از سه وضعیت زیر باشد:

  • Pending (در حال انتظار): وضعیت اولیه، زمانی که Promise هنوز به نتیجه نرسیده است.

  • Fulfilled (موفق): زمانی که Promise به درستی حل شده است و نتیجه آن آماده است.

  • Rejected (رد شده): زمانی که Promise با خطا مواجه شده است.

 

ساخت و استفاده از Promise

ایجاد یک Promise

یک Promise با استفاده از سازنده Promise ایجاد می‌شود. سازنده Promise دو تابع به نام‌های resolve و reject را به عنوان آرگومان می‌پذیرد.

ساختار کلی Promise:


const myPromise = new Promise((resolve, reject) => {
  // عملیات ناهم‌زمان
  if (/* عملیات موفقیت‌آمیز */) {
    resolve('نتیجه موفق');
  } else {
    reject('خطا');
  }
});

 

مثال:


const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    const success = true; // شبیه‌سازی موفقیت یا خطا
    if (success) {
      resolve("Data successfully fetched!");
    } else {
      reject("Error fetching data.");
    }
  }, 2000); // شبیه‌سازی تأخیر
});

 

مصرف Promise

برای مصرف (استفاده) از Promise، از متدهای then, catch, و finally استفاده می‌کنید.

ساختار کلی مصرف Promise:


myPromise
  .then(result => {
    // کاری که باید انجام شود در صورت موفقیت
    console.log(result);
  })
  .catch(error => {
    // کاری که باید انجام شود در صورت خطا
    console.error(error);
  })
  .finally(() => {
    // کاری که باید انجام شود در هر حالت، موفقیت یا خطا
    console.log("Operation completed.");
  });

 

مثال:


myPromise
  .then(result => {
    console.log(result); // Output: Data successfully fetched!
  })
  .catch(error => {
    console.error(error); // Output: Error fetching data.
  })
  .finally(() => {
    console.log("Operation completed."); // Output: Operation completed.
  });

زنجیره‌سازی Promiseها

یکی از ویژگی‌های قدرتمند Promiseها، قابلیت زنجیره‌سازی آن‌هاست. شما می‌توانید چندین then را به یک Promise اضافه کنید تا توابع مختلف به ترتیب اجرا شوند.

مثال:


const fetchData = new Promise((resolve, reject) => {
  setTimeout(() => resolve("Data"), 1000);
});

fetchData
  .then(data => {
    console.log(data); // Output: Data
    return data + " processed";
  })
  .then(processedData => {
    console.log(processedData); // Output: Data processed
  })
  .catch(error => {
    console.error(error);
  });

 

Promise.all و Promise.race

Promise.all

Promise.all برای اجرای چندین Promise به طور هم‌زمان و دریافت نتایج آن‌ها به صورت یک آرایه استفاده می‌شود. این متد زمانی موفق است که تمام Promiseها به حالت Fulfilled برسند.

مثال:


const promise1 = new Promise(resolve => setTimeout(() => resolve('First'), 1000));
const promise2 = new Promise(resolve => setTimeout(() => resolve('Second'), 2000));

Promise.all([promise1, promise2])
  .then(results => {
    console.log(results); // Output: ['First', 'Second']
  })
  .catch(error => {
    console.error(error);
  });

 

Promise.race

Promise.race برای اجرای چندین Promise به طور هم‌زمان و دریافت نتیجه اولین Promise که به وضعیت Fulfilled یا Rejected برسد، استفاده می‌شود.

مثال:


const promise1 = new Promise((resolve, reject) => setTimeout(() => resolve('First'), 1000));
const promise2 = new Promise((resolve, reject) => setTimeout(() => reject('Second'), 2000));

Promise.race([promise1, promise2])
  .then(result => {
    console.log(result); // Output: First
  })
  .catch(error => {
    console.error(error); // Output: Second
  });

 

async/await برای کار با Promiseها

معرفی async/await

async/await یک روش مدرن و خواناتر برای کار با Promiseهاست. با استفاده از async و await می‌توانید کدهای ناهم‌زمان را به شکل مشابه کدهای هم‌زمان بنویسید.

ساختار async و await:


async function fetchData() {
  try {
    const response = await fetch('https://api.example.com/data');
    const data = await response.json();
    console.log(data);
  } catch (error) {
    console.error('Error:', error);
  }
}

 

استفاده از async/await

مثال:


async function fetchData() {
  try {
    const data = await new Promise((resolve, reject) => {
      setTimeout(() => resolve("Fetched Data"), 1000);
    });
    console.log(data); // Output: Fetched Data
  } catch (error) {
    console.error(error);
  }
}

fetchData();

 

نکات و توصیه‌ها

استفاده از Promise برای عملیات ناهم‌زمان

Promiseها برای مدیریت عملیات‌های ناهم‌زمان مانند درخواست‌های شبکه، خواندن فایل‌ها و تایمرها بسیار مفید هستند. آن‌ها به شما کمک می‌کنند تا کدهای خوانا و مدیریتی بنویسید.

 

خطاهای Promise

توجه داشته باشید که مدیریت خطا در Promiseها به طور صحیح بسیار مهم است. از متد catch برای مدیریت خطاها استفاده کنید و از finally برای انجام کارهایی که باید در هر حالت انجام شود، استفاده کنید.

 

استفاده از async/await برای کدهای خواناتر

با استفاده از async/await می‌توانید کدهای ناهم‌زمان را به شکل ساده‌تر و مشابه کدهای هم‌زمان بنویسید، که باعث افزایش خوانایی و نگهداری آسان‌تر کد می‌شود.

 

نتیجه‌گیری

Promiseها ابزارهای قدرتمندی برای مدیریت عملیات‌های ناهم‌زمان در جاوا اسکریپت هستند و با استفاده از آن‌ها می‌توانید کدهای پیچیده‌تری بنویسید که به راحتی با عملیات‌های ورودی/خروجی و درخواست‌های شبکه تعامل دارند. با درک و استفاده صحیح از Promiseها و async/await, می‌توانید برنامه‌های کارآمدتر و مقیاس‌پذیرتری بسازید و مشکلات مربوط به مدیریت زمان و ناهم‌زمانی را به طور مؤثری حل کنید.

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش کامل کنترل جریان و استفاده از if و else در جاوا اسکریپت: راهنمای جامع برای مبتدیان

آموزش کامل کنترل جریان و استفاده از if و else در جاوا اسکریپت: راهنمای جامع برای مبتدیان

2م بهمن 1402

مطالعه بیشتر

آشنایی با انواع انتخاب‌گرها و تغییر پس‌زمینه با CSS: راهنمای جامع

آشنایی با انواع انتخاب‌گرها و تغییر پس‌زمینه با CSS: راهنمای جامع

4م شهریور 1402

مطالعه بیشتر

کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius

کار با border و تنظیمات آن در CSS: مدیریت زوایای گرد با border-radius

9م آبان 1403

مطالعه بیشتر

مفهوم برنامه‌نویسی هم‌زمان و ناهم‌زمان در جاوا اسکریپت: تفاوت‌ها، مثال‌ها و کاربردها

مفهوم برنامه‌نویسی هم‌زمان و ناهم‌زمان در جاوا اسکریپت: تفاوت‌ها، مثال‌ها و کاربردها

29م مهر 1403

مطالعه بیشتر

آموزش ایجاد تگ‌های صفحه‌بندی در HTML و CSS: طراحی و استایل‌دهی pagination

آموزش ایجاد تگ‌های صفحه‌بندی در HTML و CSS: طراحی و استایل‌دهی pagination

29م مرداد 1402

مطالعه بیشتر

آموزش ساخت یک گالری تصویر با استفاده از جاوا اسکریپت: راهنمای گام به گام

آموزش ساخت یک گالری تصویر با استفاده از جاوا اسکریپت: راهنمای گام به گام

3م آبان 1403

مطالعه بیشتر

چگونه اسکریپت‌های ساده جاوا اسکریپت را در مرورگر بنویسیم و اجرا کنیم: راهنمای کامل برای مبتدیان

چگونه اسکریپت‌های ساده جاوا اسکریپت را در مرورگر بنویسیم و اجرا کنیم: راهنمای کامل برای مبتدیان

2م مهر 1402

مطالعه بیشتر

آموزش مفاهیم پایه‌ای اشیاء در جاوا اسکریپت: تعریف، ویژگی‌ها و متدها

آموزش مفاهیم پایه‌ای اشیاء در جاوا اسکریپت: تعریف، ویژگی‌ها و متدها

2م شهریور 1403

مطالعه بیشتر

آموزش کامل ساخت فرم در HTML: از المان‌ها تا نکات سئو

آموزش کامل ساخت فرم در HTML: از المان‌ها تا نکات سئو

21م مرداد 1402

مطالعه بیشتر

استفاده از Viewports و Viewport Units در CSS: طراحی واکنش‌گرا با vw، vh، vmin و vmax

استفاده از Viewports و Viewport Units در CSS: طراحی واکنش‌گرا با vw، vh، vmin و vmax

16م آبان 1403

مطالعه بیشتر

استفاده از display در CSS: تغییر نحوه نمایش عناصر - راهنمای جامع

استفاده از display در CSS: تغییر نحوه نمایش عناصر - راهنمای جامع

9م آبان 1403

مطالعه بیشتر

مفاهیم پیشرفته در کلاس‌ها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثال‌ها

مفاهیم پیشرفته در کلاس‌ها و وراثت (Super, Extends) در جاوا اسکریپت: راهنمای کامل و مثال‌ها

29م مهر 1403

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد