JavaScript

Promise در جاوا اسکریپت

Promise چیست؟ promise در جاوا اسکریپت برای مبتدیان

اگر مبتدی جاوا اسکریپت هستید ، ممکن است برای درک این که واقعاً Promiseچیست ، مشکل داشته باشید.من اخیراً این موضوع را به عنوان یک موضوع در اینستا منتشر کردم و از پاسخ ها غافلگیر شدم. بنابراین تصمیم گرفتم این را به یک آموزش مقدماتی در مورد Promise های جاوا اسکریپت بسپارم.

من مقالات زیادی در مورد Promise ها خوانده ام و مشکل این است که بسیاری از این راهنماها آنها را به شیوه ای مناسبی توضیح نمی دهند.

بنابراین در این مقاله ، من یک داستان کوتاه برای شما تعریف می کنم که توضیح می دهد Promise ها چیست و دقیقاً چگونه عمل می کنند. همچنین نحوه استفاده از Promise ها در جاوا اسکریپت خود را با چند مثال به شما نشان خواهم داد.

یک Promise در جاوا اسکریپت واقعا چیست؟

تصور کنید که شما در حال مصاحبه با متقاضیان کار برای یک موقعیت در شرکت خود هستید.

مرد جوانی با عصبانیت وارد مصاحبه می شود. وقتی جلسه مصاحبه اش شروع می شود ، متوجه می شود که رزومه خود را فراموش کرده است.

ناخوشایند است ، نه؟

هر چند او دلسرد نمیشود ، چون از شانسش هم اتاقی دارد که در آن زمان هنوز در خانه بود.

او سریعاً تلفنی با هم اتاقی خود تماس می گیرد و از او کمک می خواهد. او از هم اتاقی خود درخواست می کند تا در یافتن رزومه خود کمک کند. هم اتاقی او قول می دهد به محض اینکه چیزی برای گزارش داشته باشد ، پیام کوتاه ارسال کند.

با فرض اینکه رزومه بالاخره پیدا شد ، می تواند پیام ارسال کند:

“موفق شدم ، رزومه شما را پیدا کردم!”

اما اگر او آن را پیدا نکرد ، باید یک پیام عدم موفقیت عملیات را با دلیل عدم یافتن رزومه برای او ارسال کند. به عنوان مثال ، او ممکن است این پیام را به دوستش که مصاحبه می کند ارسال کند:

“متأسفیم ، من رزومه شما را پیدا نکردم زیرا کلید گاوصندوق شما گم شده است.”

در این بین ، مصاحبه طبق برنامه ادامه می یابد و مصاحبه کننده به قول یافتن رزومه و نه رزومه واقعی پایبند است. در آن زمان ، مصاحبه کننده وضعیت تحویل رزومه را به حالت PENDING تعیین می کند.

مصاحبه شونده به تمام سوالاتی که از او پرسیده می شود پاسخ می دهد. اما در نهایت ، اشتغال او هنوز به وضعیت نهایی رزومه وی بستگی دارد.

سرانجام هم اتاقی اش پیام می دهد. همانطور که قبلاً بحث کردیم ، اگر رزومه را پیدا نکرد ، این عدم موفقیت را همراه با دلیل پیدا نکردن آن با شما در میان می گذارد.

وقتی این اتفاق بیفتد ، مصاحبه پایان می یابد و مصاحبه شونده رد می شود.

از سوی دیگر ، اگر هم اتاقی رزومه را بیابد ، با خوشحالی به دوست خود می گوید که او موفق بوده است ، و او پیش می رود و امیدهای خود را برای یافتن شغل برآورده می کند.

حالا این داستان چگونه به JS Code ترجمه می شود؟

هم اتاقی که قول می دهد رزومه را پیدا کند و پیام کوتاه ارسال کند مترادف با نحوه تعریف promise در جاوا اسکریپت است. کد به طور مستقیم یا فوری مقداری را بر نمی گرداند. در عوض ، این وعده را برمی گرداند که در نهایت ارزش(value) را بعداً ارائه می دهد.

یک promise در جاوا اسکریپت ناهمزمان(async) است ، به این معنی که حل و فصل آن به زمان نیاز دارد. همانطور که جستجوی رزومه متقاضی زمان می برد تا تکمیل شود.

به همین دلیل ، مصاحبه کننده تصمیم می گیرد که هیچ کاری نکند ، بنابراین بر اساس وعده تحویل رزومه شروع به مصاحبه با نامزد می کند. ما از وعده بازگشت رزومه به جای رزومه واقعی استفاده می کنیم.

موتور JS همچنین منتظر انجام هیچ کاری نیست – شروع به اجرای سایر قسمت های کد می کند و منتظر مقدار برگشت داده شده promise است.

متن پیام حاوی پیام وضعیت جستجوی رزومه است. با promise جاوا اسکریپت ، به آن مقدار بازگشتی نیز گفته می شود(the return value).

اگر پیام “موفقیت آمیز” باشد ، ما برای امضای نامزد وارد شده و موقعیت را به او اعطا می کنیم. در صورت عدم موفقیت ، ما درخواست وی را رد می کنیم.

با promise های جاوا اسکریپت ، ما این کار را با استفاده از یک تابع callback انجام می دهیم. این توابع در متد تو در توی then() تعریف میشوند.

برای تعیین اینکه چه callback هایی باید فراخوانی شود ، از دو عملکرد زیر استفاده می کنید:

  • resolve(value) : میتوان گفت چیزی را که میخواهیم در then() میتوانیم فراخوانی  کنیم.
  • reject (error) : میتوان با این خطایی که در جریان کار رخ میدهد را در then() به نمایش گذاشت.

اگر Promise موفقیت آمیز باشد ، callback فراخوانی می شود. اگر وعده رد شود ، کال بک reject شده به جای آن فراخوانی می شود.

Promise به سادگی یک مکان برای یک کار ناهمزمان است که هنوز به پایان نرسیده است. هنگامی که یک شیء Promise را در اسکریپت خود تعریف می کنید ، به جای اینکه یک مقدار را بلافاصله برگردانید ، یک Promise را برمی گرداند. در بخش بعدی با نحوه نوشتن Promise در جاوا اسکریپت اشنا میشویم

نحوه نوشتن Promise در جاوا اسکریپت

شما می توانید با فراخوانی کلاس Promise و ساخت یک شی مانند این ، در جاوا اسکریپت خود یک وعده تعریف کنید:

const myPromise = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve('this is the eventual value the promise will return');
  }, 300);
});

console.log(myPromise);

اجرای این در کنسول یک آبجکت Promise را برمی گرداند:

ساختن یک آبجکت تنها راهی نیست که می توانید یک Promise را تعریف کنید. همچنین می توانید از API داخلی Promise برای دستیابی به همان هدف استفاده کنید در بخش بعد درباره Rejected Promises در جاوا اسکریپت صحبت خواهیم کرد :

const anotherPromise = Promise.resolve("this is the eventual value the promise will return")

console.log(anotherPromise);

Rejected Promises در جاوا اسکریپت

Promise نیز می تواند رد شود. اغلب اوقات ، rejection رخ می دهد زیرا JS هنگام اجرای کد Asynchronous با نوعی خطا مواجه می شود. در چنین سناریویی ، به جای آن تابع را ()reject می کند.

در اینجا یک مثال ساده و ساختگی از نحوه reject شدن Promise وجود دارد:

const myPromise = new Promise((resolve, reject) => {
  let a = false;
  setTimeout(() => {
    return (a) ? resolve('a is found!'): reject('sorry, no a');
  }, 300);
}); 

آیا می توانید به دلیل reject شدن این Promise فکر کنید؟ اگر گفتید “چون a فالس نیست” .

امیدوارم توضیحات برای شما مفید باشد.

برای مطالعه مقاله PWA چیست ؟ بر روی لینک کلیک کنید

کلمات کلیدی:Promise چیست؟،نحوه نوشتن Promise در جاوا اسکریپت، Rejected Promises در جاوا اسکریپت

دیدگاهتان را بنویسید

دکمه بازگشت به بالا