I started using Angular2 Observable, but I can't find something similar to .then that I used with Promises.
This is what I want to accomplish.
code from header.component.ts
public login() {
this._user = AuthService.getInstance().login(this._loginInfo);
}
code from auth.service.ts
return this._httpClient.post('LoginAction', credentials)
.map(res => res.json())
.subscribe(user => {
return new User(user);
});
With promises, login function would return Promise, that would eventually transform to actual response from server. But with Observable this won't work.
Is there a way to do similar thing? I want to avoid need of putting subscribe inside component's login function. I want to be able to do all the work in service, and to return actual object to component.
Also, I tried to create Promise, with toPromise, but I keep getting toPromise is not a function.
p.s. _httpClient is my wrapper around angular2 http in which I prepare request by adding some headers etc.
edit
return this._httpClient.post('LoginAction', credentials)
.map(res => res.json())
.toPromise(). <-- i keep getting that it is not a function
then(user => {
return new User(user);
});
by doing this, my component will get object (which is what it need), and in service i could do additional things (like saving user to localstorage, once I logged him).
And I switched to Promise, because doing same with Observable is not working (or I am doing it wrong)?
I see that returned object is Observable (before calling toPromise), but I don't see toPromise function indeed.
httpClient.postis async, so you need to provide callback forthenfunction if you use Promise, or forsubscribefunction if you use RxJS Observable. There is async/await in ES6 (ponyfoo.com/articles/understanding-javascript-async-await) that can make your code look like linear, but it works by using callbacks underneath. - metamaker