কারণ:
এর কারণ undefinedহ'ল আপনি একটি অ্যাসিনক্রোনাস অপারেশন করছেন। মানে getEventListপদ্ধতিটি সম্পূর্ণ করতে কিছুটা সময় লাগবে (বেশিরভাগ আপনার নেটওয়ার্কের গতির উপর নির্ভর করে)।
সুতরাং HTTP কল তাকান।
this.es.getEventList()
আপনি আসলে ("আগুন") তৈরি করার পরে আপনার সাথে আপনার এইচটিপি অনুরোধ প্রতিক্রিয়াটির জন্য অপেক্ষাsubscribe করবে । অপেক্ষা করার সময়, জাভাস্ক্রিপ্ট এই কোডের নীচে লাইনগুলি কার্যকর করবে এবং যদি এটি সিঙ্ক্রোনাস অ্যাসাইনমেন্ট / ক্রিয়াকলাপগুলির মুখোমুখি হয় তবে তা তা তত্ক্ষণাত কার্যকর করা হবে।
সুতরাং সাবস্ক্রাইব করার পরে getEventList()এবং প্রতিক্রিয়াটির জন্য অপেক্ষা করার পরে ,
console.log(this.myEvents);
অবিলম্বে লাইন কার্যকর করা হবে। undefinedসার্ভারের কাছ থেকে প্রতিক্রিয়া আসার আগে এবং এর মান হ'ল (বা আপনি এটি প্রথম দিকে যা শুরু করেছেন) তার কাছে।
এটি করার মতো:
ngOnInit(){
setTimeout(()=>{
this.myEvents = response;
}, 5000);
console.log(this.myEvents); //This prints undefined!
}
সমাধান:
তাহলে আমরা কীভাবে এই সমস্যাটি কাটিয়ে উঠব? আমরা কলব্যাক ফাংশনটি ব্যবহার করব যা subscribeপদ্ধতি। কারণ সার্ভার থেকে ডেটা এলে subscribeএটি প্রতিক্রিয়াটির সাথেই থাকবে।
সুতরাং কোডটি এতে পরিবর্তন করা হচ্ছে:
this.es.getEventList()
.subscribe((response)=>{
this.myEvents = response;
console.log(this.myEvents); //<-- not undefined anymore
});
প্রতিক্রিয়া মুদ্রণ করবে .. কিছু সময় পরে।
আপনার কি করা উচিত:
আপনার প্রতিক্রিয়াটির সাথে লগইন করা ছাড়াও অনেকগুলি জিনিস থাকতে পারে; subscribeডেটা এলে আপনার এই সমস্ত অপারেশন কলব্যাকের ভিতরে ( ফাংশনের অভ্যন্তরে) করা উচিত।
আরেকটি বিষয় উল্লেখ করার বিষয় হ'ল আপনি যদি কোনও Promiseপটভূমি থেকে আসেন তবে thenকলব্যাকটি subscribeপর্যবেক্ষণের সাথে মিল রাখে।
আপনার যা করা উচিত নয়:
আপনার একটি সিঙ্ক অপারেশনে অ্যাসিঙ্ক অপারেশন পরিবর্তন করার চেষ্টা করা উচিত নয় (এটি যে আপনি করতে পারেন তা নয়)। আমাদের অ্যাসিঙ্ক অপারেশনগুলির অন্যতম কারণ হ'ল ব্যবহারকারীরা কোনও সময় অপারেশনটি শেষ হওয়ার অপেক্ষায় না রাখে যখন তারা সেই সময়ের মধ্যে অন্যান্য কাজ করতে পারে। মনে করুন যে আপনার একটি অ্যাসিঙ্ক অপারেশন সম্পূর্ণ হতে 3 মিনিট সময় নেয়, যদি আমাদের অ্যাসিঙ্ক অপারেশন না থাকে তবে ইন্টারফেসটি 3 মিনিটের জন্য হিমশীতল হয়ে যায়।
প্রস্তাবিত পড়া:
এই উত্তরের আসল ক্রেডিটটি যায়: আমি কীভাবে একটি অ্যাসিঙ্ক্রোনাস কল থেকে প্রতিক্রিয়া ফিরিয়ে দেব?
তবে কৌণিক 2 প্রকাশের সাথে আমাদের টাইপস্ক্রিপ্ট এবং পর্যবেক্ষণযোগ্যদের সাথে পরিচয় করিয়ে দেওয়া হয়েছিল সুতরাং এই উত্তরটি পর্যবেক্ষণযোগ্যদের সাথে একটি অ্যাসিনক্রোনাস অনুরোধ পরিচালনা করার প্রাথমিক বিষয়গুলি আশাবাদী coversেকে দেয়।