دیروز داشتم یک نمونه کدی رو می خواندم، به تابع defer برخورد کردم. در موردش تحقیق کردم و متوجه شدم چه تابع جالب و پرکاربردیه.
خط زیر رو در نظر بگیرید:
هنگام اجرای این کد، بلافاصله و پیش از هر اتصال و درخواستی، یک Promsie ساخته میشه.
کد بالا چندان مشابه Observer رفتار نمیکنه. ممکنه ما در لحظه به یک Promise ساخته شده نیاز نداشته باشیم. زمانی که از defer استفاده میکنیم، در واقع یک بلاک کد رو آماده میکنیم و زمانی که یک Observable درخواست Observe بکنه.
تا قبل از اینکه هیچ Observable ی درخواست subscribe نکرده، هیچ Promise ی هم ساخته نمیشه.
به محض درخواست از Observable ، یک پرامیس توسط PromiseFactory تعریف شده در defer، ساخته شده و برگردانده میشود.
دقت کنید که وقتی صحبت از Factory میاد وسط یعنی فرایند تصمیم گیری برای ساخت. یعنی در تابع defer ما میتونیم تصمیم بگیریم که چه Promise ی برگردونیم:
در کد بالا موقع اجرای subscribe در خط آخر، تابع defer فراخوانی میشه. اگر Math.random مقداری بزرگتر از 0.5 رو برگردونه، پرامیس به ازای هر کلیکی هر جای صفحه لاگ میندازه و اگر مقداری کوچکتر مساوی 0.5 برگردونه، هر ثانیه عدد برگشتی اینتروال رو لاگ میندازه.
موفق باشید
:)