typescript - Angular 11: subscribe este depreciat: Folosește în schimb un observer?
Tslint-ul meu a înnebunit? Dă avertisment pentru fiecare abonament pe care l-am făcut în întreaga aplicație. Nu contează dacă folosesc sintaxa veche sau cea nouă, tot spune că subscribe este depreciat... Cum să scriu un abonament care să nu fie depreciat?
Asta a fost în regulă până astăzi:
something.subscribe((user: User) => {
this.userProviderService.setUserId(user.userId);
this.proceed = true;
});
Am încercat sintaxă nouă, dar nu face nicio schimbare:
something.subscribe({
next: (user: User) => {
this.userProviderService.setUserId(user.userId);
this.proceed = true;
},
complete: () => {},
error: () => {}
});
Exact asta spune:
(metodă) Observable.subscribe(next?: (valoare: Obiect) => void, eroare?: (eroare: any) => void, complet?:() => void): Subscription (+4 suprasarcini) @deprecated — Folosiți un observator în locul unui callback complet
@deprecated — Folosește un observator în loc de un callback de eroare
@deprecated — Folosește un observator în loc de un callback complet
subscribe este depreciat: Folosește un observator în locul unui callback complet (depreciere)tslint(1)
Deci cum mă abonez acum la diverse lucruri?
Răspuns #1
Tocmai am căutat TSLint (v1.3.3) în fila de extensii VS Code. Spune:
❗IMPORTANT: TSLint a fost întrerupt în favoarea ESLint.
După ce am dezactivat TSLint și am instalat ESLint, toate avertismentele legate de abonamente au dispărut.
Noroc!
Răspuns #2
Pentru a răspunde la întrebarea ta „Deci, cum mă abonez la lucruri acum”: https://rxjs-dev.firebaseapp.com/guide/observer Acesta este. Este ușor de folosit și destul de similar cu ceea ce s-a făcut înainte, cu mica diferență că acum acceptă de fapt un obiect (observer) cu 3 chei: next, error, complete.
Am avut aceeași discuție acum 2 zile la muncă și, deși poți/trebuie să folosești observatorul, deprecierea pare a fi o alarmă falsă. (Am crezut că trebuie să schimbăm ~900 de abonați):
Aceasta este o problemă creată pe pagina github a rxjs referitoare la această problemă: https://github.com/ReactiveX/rxjs/issues/6060
Și în el devii spun că se datorează unui bug în TypeScript: https://github.com/microsoft/TypeScript/issues/43053
Acest bug a fost deja rezolvat acum 3 zile, totuși nu sunt sigur dacă este deja în cea mai nouă versiune:
https://github.com/microsoft/TypeScript/pull/43165
Răspunsul #3
Ultimele versiuni acceptă următoarea structură:
myObservable.subscribe({
next: (res) => {
console.log('success', res)
},
error: (err) => {
console.log('error', err)
},
complete: () => {
console.log('completed')
}
})
