Angular: RxStomp Watch, Configure, Activate Method

Nov 20 2020

Di Stomp kami menggunakan mehtod ini:

initUserEvents() {

this.stompService.startConnect().then(() => {
      this.stompService.done('init');

this.stompService.subsribe('/channel/login', res => {
      if (res.username !== this.username) {

        this.newConnectedAccounts.push(res.username);

sekarang saya bekerja dengan RxStomp dan saya tidak dapat menemukan cara yang tepat untuk menggunakan metode "penggantian" ini:

initUserEvents() {

this.stompService.configure();
    this.stompService.activate(){

    this.stompService.watch('/channel/login', res => {
      if (res.username !== this.username) {
        this.newConnectedAccounts.push(res.username);

Kesalahan yang saya dapatkan adalah: TS2345: Argumen tipe '(res: any) => void' tidak dapat ditetapkan ke parameter tipe 'StompHeaders'. Tanda tangan indeks tidak ada dalam tipe '(res: any) => void'.

Jawaban

JustinBertram Nov 20 2020 at 14:59

Lihatlah dokumentasi RxStomp. Ia mengatakan:

Perbedaan utamanya adalah ia mengekspos operasi sebagai RxJS Observables. Misalnya ketika titik akhir STOMP berlangganan ia mengembalikan Observable yang akan mengalirkan semua pesan yang diterima.

Dengan pengecualian beforeConnect, fungsionalitas yang terkait dengan semua callback di @ stomp / stompjs Klien diekspos sebagai Observables / Subjects / BehaviorSubjects.

Dengan kata lain, Anda tidak meneruskan callback ke watchmetode tersebut. Ini mengembalikan yang Observabledapat Anda gunakan untuk mendapatkan pesan.

RxStomp API mengharapkan Anda meneruskan header ke watchmetode, bukan callback. Itulah mengapa ini memberi tahu Anda secara khusus:

TS2345: Argument of type '(res: any) => void' is not assignable to parameter of type 'StompHeaders'.