Angular HttpClient toPromise() deprecated (rxjs) beheben

English Deutsch

Problem:

Es gibt Angular HTTP-Client-Code wie

httpclient_toPromise.ts
this.http.get<MyType>(`${this.baseURL}/api/myAPI`).toPromise()

aber toPromise() ist in neueren Versionen von Angular / rxjs veraltet.

toPromise_deprecation.ts
/** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */
toPromise(): Promise<T | undefined>;

Lösung

In den meisten Fällen sollte für HttpClient firstValueFrom() von rxjs verwendet werden, da die HttpClient-Observables typischerweise sowieso nur einen Wert zurückgeben.

Zuerst firstValueFrom aus rxjs importieren:

import_firstValueFrom.ts
import { firstValueFrom } from 'rxjs';

dann den .toPromise()-Aufruf entfernen:

remove_toPromise.ts
// Before
this.http.get<MyType>(`${this.baseURL}/api/myAPI`).toPromise()
// After
this.http.get<MyType>(`${this.baseURL}/api/myAPI`)

und die gesamte Anweisung mit firstValueFrom umschließen:

use_firstValueFrom.ts
// Before
this.http.get<MyType>(`${this.baseURL}/api/myAPI`)
// After
firstValueFrom(this.http.get<MyType>(`${this.baseURL}/api/myAPI`).toPromise())

Dies behebt das Problem.


Check out similar posts by category: Angular, Typescript