Promise در آنگولار، توضیح داده شده به شکل کارتون

Promise در آنگولار، توضیح داده شده به شکل کارتون

یک روز صبح، پدری به فرزندش گفت: “پسرم، برو و وضعیت آب و هوا را پیش‌بینی کن!”

 

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

[alert type=”success”] این مقاله از بلاگ andyshora ترجمه شده است. [/alert]

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

بعد از نیم ساعت یا بیشتر، فرزند به خانه بر می گردد. هر هفته نتایج وضعیت آب و هوا متفاوت بود:

 

نتیجه آب و هوا A) آب‌ و هوا پیش‌بینی شد! آفتابی است😊

فرزند موفق می شود وضعیت آب و هوا را پیش‌بینی کند: آسمانی صاف و آفتابی! قول (promise) انجام شد (فرزند به وعده خود عمل کرد) و پدر تصمیم می گیرد که بسات ماهیگیری را برای جمعه آماده کند.

promise در angular آب و هوا خوب است

 

نتیجه آب و هوا B) آب‌ و هوا پیش‌بینی شد! ابری و بارانی است😞

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

promise آب و هوا بد است

نتیجه آب و هوا C) نمی تواند وضعیت آب و هوا را پیش‌بینی کند 😕

قرزند قادر به پیش‌بینی آب و هوا نشد، مشکلی وجود دارد. هوا مه آلود بود و مانع دید آب و هوای آن سوی تپه ها می شد.  قولی که فرزند به پدرش داد شکسته شد – promise رد شد! پدر تصمیم می گیرد بماند و ریسک این خطر را نکند.

promise


 

در کد به چه صورت نوشته می شود؟

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

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

با استفاده از تابع ()then در آنگولار می توانیم مشخص کنیم پدر در هر نتیجه به چه چیزی برای انجام دادن نیاز دارد. تابع ()then دو تابع را به عنوان پارامتر قبول می کند – یک تابع برای اینکه وعده برآورده شده است و یک تابع برای وقتی که وعده رد شده است.

کنترلر: FatherCtrl

پدر کنترل وضعیت اینجا را در اختیار گرفته است:

 

سرویس: SonService

از فرزند به عنوان یک سرویس استفاده می شود، او به بالای تپه رفت و سعی کرد تا آب و هوا را مشاهده کند. ما فرض می کنیم که فرزند با استفاده از تلسکوپش به دنبال آب و هوا است، این شبیه به استفاده از API آب و هوا است، به این معنا که یک عملیات asynchronous است، او ممکن است پاسخ های متغیر داشته باشد، یا دارای مشکلاتی باشد (مثلا یک پاسخ 500، هوای مه آلود).

پاسخ آمده از “API آب و هوای ماهیگیری” می تواند با promise بازگشت داده شود، اگر وعده انجام شد با قالب { "forecast": "good" } خواهد بود.


  • مرسی عالی بود این روش خیلی واضح میکنه ماجراهایی که یکم توضیحشون پیچیدست.

    • پاتریک درآواکیانس

      خواهش می کنم 😉 بله درست است یکم مفهموم اینجور چیزا پیچیدست.

  • محسن

    جهت مشاوره و شرکت در یک پروژه Cloud شرکت اوپایی با ما تماس بگیرید. Jobs@Xepos.co.uk