How to fix Angular HttpClient toPromise() deprecated (rxjs)
Problem:
You have angular HTTP client code like
this.http.get<MyType>(`${this.baseURL}/api/myAPI`).toPromise()
but toPromise()
is deprecated in recent versions of angular / rxjs.
/** @deprecated Replaced with {@link firstValueFrom} and {@link lastValueFrom}. Will be removed in v8. Details: https://rxjs.dev/deprecations/to-promise */
toPromise(): Promise<T | undefined>;
Solution
In most cases, for HttpClient, you want to use rxjs’s firstValueFrom()
since the HttpClient Observable
s typically only return one value anyway.
First, import firstValueFrom
from rxjs
:
import { firstValueFrom } from 'rxjs';
then remove the .toPromise()
call:
// Before
this.http.get<MyType>(`${this.baseURL}/api/myAPI`).toPromise()
// After
this.http.get<MyType>(`${this.baseURL}/api/myAPI`)
and surround the entire statement with firstValueFrom
:
// Before
this.http.get<MyType>(`${this.baseURL}/api/myAPI`)
// After
firstValueFrom(this.http.get<MyType>(`${this.baseURL}/api/myAPI`).toPromise())
This will fix the issue.