امروز قصد دارم درباره تفاوت بین Promise و Observable صحبت بکنم. چیزی که بخوبی در باره این دو تا موضوع می دونیم اینه که برای انجام داده های که همزمان نیستن یا بهتر بگم asynchronous data هر دوی اینها استفاده می شن. اما تفاووت در کجاست؟
در JavaScript ES6 بحث Promise مطرح شد و ازش به عنوان یه راه حل برای خلاصی از جهنم callback ها یاد کردن. بنابراین Promise مفهومی مدرن و قدرتمند برای نوشتن کد ناهمگام به روشی بهتر ارائه کرد. اما Observable توی انگولار مطرح شدن.از Observable در Angular به عنوان رابطی برای مدیریت انواع عملیات برگشت همزمان غیر همزمان استفاده میشه ، مثل تعریف وقایع سفارشی که داده های خروجی قابل مشاهده را از childبه مولفه parent اصلی می فرسته. ماژول HTTP از قابلیت مشاهده برای رسیدگی به درخواست ها و پاسخ های AJAX استفاده می کنه.
حالا وقت این رسیده از تفاوت بین اینها هم بگیم
1- وقتی ما در حال انجام یک HTTP request هستیم، promise مدیریت می کنه یک پاسخ تنها (single response) برای همون در خواست (same request) اما وقتی بخوایم چندین پاسخ (multiple responses) برای همون درخواست (same request) مدیریت کنیم میریم سراغ observable.
برای درک بهتر این مورد به این مثال توجه کنید:
//Promise const promise = new Promise((data) =>{ data(1); data(2); data(3); }).then(element => console.log(‘Promise ‘ + element)); //Output: Promise 1 //Observable const observable = new Observable((data) => { data.next(1); data.next(2); data.next(3); }).subscribe(element => console.log(‘Observable ‘ + element)); //Output: Observable 1 , Observable 2 , Observable 3
2- باید گفت که Observables تنبل هستن، اون ها تا زمانی که subscribe (به کمک متد subscribe()) نشن، اجرا نمی شن، اما در مقابل Promises تنبل نیستن و بلافاصله بعد از ایجاد ساخته میشن.
3- مورد سوم این هستش که Observables به کمک متد unsubscribe() قابل توقف و انصراف هستن در صورتی Promises قابل توقف یا انصرافی براشون وجود نداره.
4- مورد آخر هم اینه که Observables خطا به subscribers تحویل میده اما Promises اونو push می کنه به child promises.
امیدوارم این مقاله براتون مفید بوده باشه و ازش استفاده خوبی ببرید.
ممنون از توجهتون :)