Angular: RxStomp Watch, Configure, Activate Method
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
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'.