Berhenti berlangganan panggilan klien HTTP di kait OnDestroy dari Layanan Angular

Apakah ada cara untuk berhenti berlangganan panggilan http dari layanan sudut onDestroy hook.

P.S. Saya mengetahui operator 'ambil' rxjs atau berhenti berlangganan layanan dari komponen itu sendiri.

    import { HttpClient } from "@angular/common/http";
import { Injectable, OnDestroy } from "@angular/core";

@Injectable()
export class SampleService implements OnDestroy {
  constructor(private httpClient: HttpClient) {}

  getSampleData() {
    return this.httpClient.get("https://jsonplaceholder.typicode.com/todos/1");
  }
  ngOnDestroy(): void {
    // automatically unsubscribe to service.
  }
}

person varunduttsharma7    schedule 28.04.2021    source sumber
comment
Apakah ini menjawab pertanyaan Anda? Apakah perlu berhenti berlangganan dari observasi yang dibuat oleh Http metode?   -  person R. Richards    schedule 28.04.2021
comment
@ R.Richards Terima kasih atas tautannya. Tetapi ketika instance layanan dihancurkan dengan komponen, dapatkah kita menulis logika pembersihan untuk memeriksa apakah ada panggilan http yang perlu dihentikan langganannya??   -  person varunduttsharma7    schedule 28.04.2021


Jawaban (1)


Layanan tidak memiliki siklus hidup yang digerakkan oleh UI dan oleh karena itu, seberapa sering Anda mengimplementasikan onDestroy, layanan tersebut tidak akan pernah dipanggil kecuali Anda sendiri yang memanggilnya secara manual.

Itu sebabnya kami memiliki alat, baca API, seperti:

<div> {{ yourObservable$ | async | json }} </div>
@Component({...})
export class Component implements OnInit {
   yourObservable$: Observable<any>
   constructor(public yourService: TheService) {
       this.yourObservable$ = this.yourService.getSampleData()
   }
}

Pipa async memperhatikan perubahan siklus hidup dan berlangganan serta berhenti berlangganan secara otomatis setiap kali komponen dihapus

  • Langganan (yang dapat Anda tambahkan sybscription lain dengan memanggil .add) dan pada panggilan onDestroy komponen Anda subscription.unsubscribe()

Berlangganan.berhenti berlangganan adalah dasar pembuatan pipa async, dan Anda juga dapat menggunakannya sendiri

person Some random IT boy    schedule 28.04.2021
comment
Tetapi kita melihat bahwa instance layanan sudut non-tunggal akan memanggil ngOndestroy dari layanan ini ketika komponen yang menyediakan instance tersebut dihancurkan?? Saya mencari cara untuk memeriksa apakah masih ada pelanggan untuk panggilan http. - person varunduttsharma7; 28.04.2021
comment
Biasanya ketika berhadapan dengan hal-hal seperti ini: ada satu aturan emas yang bekerja dengan sangat baik dan mirip dengan cara bahasa pemrograman C mengaturnya: Jika Anda akan memasak di dapur, biarkan seperti yang Anda temukan setelah Anda selesai melakukannya . Jadi, jika suatu komponen berlangganan, maka ia harus bertanggung jawab untuk berhenti berlangganan. Jika Anda membiarkan langganan terbuka, Anda akan membocorkan memori dan kehilangan kinerja (karena browser akan sibuk mengeksekusi kode langganan yang tidak berguna). - person Some random IT boy; 29.04.2021
comment
Jika Anda ingin melakukan pembersihan di sisi layanan ketika komponen dihancurkan, Anda dapat memanggil service.onDestroy() dari sebuah komponen; tapi berhati-hatilah; contoh layanan mungkin dibagikan dan jika Anda melakukan hal-hal berbahaya, Anda mungkin mengacaukan status komponen lainnya. Saya sangat menyarankan Anda tetap menggunakan pipa async - person Some random IT boy; 29.04.2021