I am using angular 6. One of the http calls returns a ZoneAwarePromise
when I try to convert the Observable
into a Promise
. Also the then block is not getting called.
const login = this.authService.login(email, password).toPromise()
login.then(() => {\* not getting called*\})
Can someone explain what is a ZoneAwarePromise
?
Angular relies heavily on zone.js to persist an execution context across asynchronous tasks. It's wrapped up in an injectable service called NgZone
.
These Zones wrap up common JS objects meant to run async tasks, which include Promises. This is maintained in a Zone
as a Task, MicroTask, etc.
A ZoneAwarePromise
is still functionally identical to a normal Promise, but internally stays aware of a Zone
's execution context, and the Zone
can know when that Promise completes.
In Angular, this execution context almost always means running change detection.