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')
    }     
})