Saat saya menjalankan linter, tertulis:
subscribe is deprecated: Use an observer instead of an error callback
Kode (dari aplikasi angular 7 dengan angular-cli):
this.userService.updateUser(data).pipe(
tap(() => {bla bla bla})
).subscribe(
this.handleUpdateResponse.bind(this),
this.handleError.bind(this)
);
Tidak tahu persis apa yang harus saya gunakan dan bagaimana ...
Terima kasih!
.subscribe({ next: this.handleUpdateResponse.bind(this), error: this.handleError.bind(this) })
Jawaban:
subscribe
tidak usang, hanya varian yang Anda gunakan yang tidak digunakan lagi. Di masa depan,subscribe
hanya akan mengambil satu argumen: baiknext
handler (fungsi) atau objek pengamat.Jadi dalam kasus Anda, Anda harus menggunakan:
Lihat masalah GitHub ini:
https://github.com/ReactiveX/rxjs/pull/4202
https://github.com/ReactiveX/rxjs/issues/4159
sumber
Mungkin menarik untuk dicatat bahwa
observer
Object juga bisa (masih) berisicomplete()
metode dan properti tambahan lainnya. Contoh:Dengan cara ini, lebih mudah untuk menghilangkan metode tertentu. Dengan tanda tangan lama itu perlu untuk memasok
undefined
dan berpegang pada urutan argumen. Sekarang jauh lebih jelas ketika misalnya hanya menyediakan penangan berikutnya dan lengkap.sumber
Anda bisa mendapatkan kesalahan ini jika Anda memiliki objek yang diketik sebagai
Observable<T> | Observable<T2>
- sebagai kebalikan dariObservable<T|T2>
.Sebagai contoh:
Kompilator tidak membuat
obs
tipeObservable<number | string>
.Mungkin mengejutkan Anda bahwa berikut ini akan memberi Anda kesalahan
Use an observer instead of a complete callback
danExpected 2-3 arguments, but got 1.
Itu karena ini bisa menjadi salah satu dari dua jenis yang berbeda dan kompilator tidak cukup pintar untuk merekonsiliasi mereka.
Anda perlu mengubah kode Anda untuk mengembalikan,
Observable<number | string>
bukanObservable<number> | Observable<string>
. Seluk-beluknya akan bervariasi tergantung pada apa yang Anda lakukan.sumber
Saya mendapatkan peringatan karena saya melewati ini untuk berlangganan:
Karena mengembalikan satu nilai, itu tidak kompatibel dengan
subscribe
tanda tangan fungsi.Beralih ke ini membuat peringatan pergi (mengembalikan null / void);
sumber