I have a service that has a method foo. Inside the method I subscribe to an observable (http-client).
foo () : boolean
{
let ret : false;
this.http.get ("/blabla").subscribe (
(resp) =>
{
ret = true;
}
return ret;
);
I like to return a boolean value from foo that depends on the get. That is not working because http.get is asynchrouns - return is called before http.get finished.
How can I make this synchronous?
EDIT
Returning the observable instead boolean is not an option here. That is because I handle the response of get in foo (not shown here) but I also need to act out of foo depending of its return.
EDIT2
I extended my sample with pipe and tap. Now I return the http.get-observable for outside the service and I process the http.get-result with tap.
foo () : Observable <any>
{
return this.http.get ("/blabla").pipe (tap (x => handlehere ()));
}
As far I see there is only one uglyness with it. I have the complexity of parsing the get-result inside AND outside of foo. I would prefer a simple boolean outside of foo.
How can I make this synchronous?
<= you don't, you return an observable or a promise.Returning the observable instead boolean is not an option here
<= why? – Igorbut I also need to act out of foo depending of its return
<= then make the acting on the call also occur asynchronously. Once you understand the pattern used for asynchronous javascript (typescript) code/interaction it will be much easier for you to write your application. There is generally a fair amount of asynchronous interaction in applications because they interact with external resources (user input, databases, network streams, etc). You will be a better programmer for it. – Igor