কিছুক্ষণ পরীক্ষার পরে, ডকুমেন্টেশন পড়ার এবং এইচটিপিপি্লায়েন্টের উত্সকোড।
HttpClient:
https://github.com/angular/angular/blob/master/packages/common/http/src/client.ts
HttpXhrBackend :
https://github.com/angular/angular/blob/master/packages/common/http/src/xhr.ts
HttpClientModule
: https://indepth.dev/exploring-the-httpclientmodule-in-angular/
কৌণিক ইউনিভার্সিটি: https://blog.angular-university.io/angular-http/
এই বিশেষ ধরণের পর্যবেক্ষকগুলি একক-মান স্রোত: HTTP অনুরোধটি সফল হলে এই পর্যবেক্ষণগুলি কেবল একটি মান নির্গত করে এবং তারপরে সম্পূর্ণ হবে
এবং "আমি কি প্রয়োজন" এর পুরো ইস্যুটির উত্তর বাতিল করতে চাই?
এটা নির্ভর করে.
এইচটিটিপি কল মেমরিলিক্স কোনও সমস্যা নয়। সমস্যাগুলি হ'ল আপনার কলব্যাক ফাংশনে যুক্তি।
উদাহরণস্বরূপ: রাউটিং বা লগইন।
যদি আপনার কলটি লগইন কল হয় তবে আপনাকে "আনসাবস্ক্রাইব" করতে হবে না তবে ব্যবহারকারীকে পৃষ্ঠাটি ছেড়ে গেছে কিনা তা আপনাকে নিশ্চিত করতে হবে, ব্যবহারকারীর অনুপস্থিতিতে আপনি প্রতিক্রিয়াটি সঠিকভাবে পরিচালনা করছেন।
this.authorisationService
.authorize(data.username, data.password)
.subscribe((res: HttpResponse<object>) => {
this.handleLoginResponse(res);
},
(error: HttpErrorResponse) => {
this.messageService.error('Authentication failed');
},
() => {
this.messageService.info('Login has completed');
})
বিরক্তিকর থেকে বিপজ্জনক
এখন শুধু কল্পনা করুন, নেটওয়ার্কটি স্বাভাবিকের চেয়ে ধীর গতিতে, কলটি আরও 5 সেকেন্ড সময় নেয় এবং ব্যবহারকারী লগইন ভিউটি ছেড়ে "সমর্থন দৃশ্যে" যান।
উপাদানটি সক্রিয় নাও হতে পারে তবে সাবস্ক্রিপশন। কোনও প্রতিক্রিয়ার ক্ষেত্রে, ব্যবহারকারী হঠাৎ পুনরায় সাজানো হবে (আপনার হ্যান্ডেল রিসপনস () প্রয়োগের উপর নির্ভর করে)।
এটা ভাল না ।
এছাড়াও আপনি কল্পনা করুন যে ব্যবহারকারী পিসি ছাড়েন, বিশ্বাস করে তিনি এখনও লগইন করেননি। তবে আপনি ব্যবহারকারীকে লজিক করেছেন, এখন আপনার কাছে একটি সুরক্ষা সমস্যা রয়েছে।
সদস্যতা ছাড়াই আপনি কী করতে পারেন?
আপনাকে দেখার বর্তমান অবস্থার উপর নির্ভরশীল কল করুন:
public isActive = false;
public ngOnInit(): void {
this.isActive = true;
}
public ngOnDestroy(): void {
this.isActive = false;
}
.pipe(takeWhile(value => this.isActive))
প্রতিক্রিয়াটি কেবলমাত্র दृক্ষ সক্রিয় থাকা অবস্থায় পরিচালিত হবে তা নিশ্চিত করার জন্য ব্যবহারকারী ।
this.authorisationService
.authorize(data.username, data.password).pipe(takeWhile(value => this.isActive))
.subscribe((res: HttpResponse<object>) => {
this.handleLoginResponse(res);
},
(error: HttpErrorResponse) => {
this.messageService.error('Authentication failed');
},
() => {
this.messageService.info('Login has completed');
})
তবে আপনি কীভাবে নিশ্চিত হতে পারেন যে সাবস্ক্রিপশনটি স্মৃতিশক্তি সৃষ্টি করছে না?
"টিয়ারডাউনলজিক" প্রয়োগ করা থাকলে আপনি লগ করতে পারেন।
সাবস্ক্রিপশনের টিয়ারডাউন লজিক যখন সাবস্ক্রিপশনটি খালি বা সাবস্ক্রাইব করা থাকে তখন কল করা হবে।
this.authorisationService
.authorize(data.username, data.password).pipe(takeWhile(value => this.isActive))
.subscribe((res: HttpResponse<object>) => {
this.handleLoginResponse(res);
},
(error: HttpErrorResponse) => {
this.messageService.error('Authentication failed');
},
() => {
this.messageService.info('Login has completed');
}).add(() => {
// this is the teardown function
// will be called in the end
this.messageService.info('Teardown');
});
আপনাকে সাবস্ক্রাইব করতে হবে না। আপনার যুক্তিতে কোনও সমস্যা আছে কিনা তা আপনার জানা উচিত, যা আপনার সাবস্ক্রিপশনে সমস্যা তৈরি করতে পারে। এবং তাদের যত্ন নিন। বেশিরভাগ ক্ষেত্রে, এটি কোনও সমস্যা হবে না, তবে অটোরিয়েশনের মতো সমালোচনামূলক কাজগুলিতে বিশেষত্ব, আপনার অপ্রত্যাশিত আচরণের যত্ন নেওয়া উচিত, এটি "আনসাবস্ক্রাইব" বা পাইপিং বা শর্তসাপেক্ষে কলব্যাক ফাংশনগুলির মতো অন্য যুক্তির সাথে দেখা উচিত।
কেন সবসময় সাবস্ক্রাইব করবেন না?
আপনি কোনও পুট বা পোস্টের অনুরোধ করেছেন তা কল্পনা করুন। সার্ভারটি যেভাবেই বার্তাটি গ্রহণ করে, কেবল প্রতিক্রিয়াটি কিছুটা সময় নেয়। সাবস্ক্রাইব করা, পোস্টটি পূর্বাবস্থায় ফেরাবে না বা রাখবে না। তবে আপনি যখন সদস্যতা ত্যাগ করেন, আপনার কাছে প্রতিক্রিয়াটি পরিচালনা করার বা ব্যবহারকারীকে অবহিত করার সুযোগ থাকবে না, উদাহরণস্বরূপ ডায়ালগ বা টোস্ট / বার্তা ইত্যাদির মাধ্যমে inform
যে কারণে ব্যবহারকারী বিশ্বাস করতে পারে, পুট / পোস্ট অনুরোধটি করা হয়নি।
সুতরাং এটি নির্ভর করে। এটি আপনার ডিজাইনের সিদ্ধান্ত, এই জাতীয় সমস্যাগুলি কীভাবে মোকাবেলা করা যায়।