Return value from multiple observable calls in a function
I have a function that is currently working. When calling this function, it will set a value in the component. (user.userImage)
getLoggedInUserPhoto()
this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/me/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
this.user.userImage = res;
)
)
);
I am trying to do the same thing with a new function, except I want the function to return the value instead of setting a value in the component. I have searched all over and most likely I am using the wrong search terms. However, here is a pass at what I am trying to achieve
getPhoto(email: string): string
return this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
return res;
)
)
);
add a comment |
I have a function that is currently working. When calling this function, it will set a value in the component. (user.userImage)
getLoggedInUserPhoto()
this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/me/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
this.user.userImage = res;
)
)
);
I am trying to do the same thing with a new function, except I want the function to return the value instead of setting a value in the component. I have searched all over and most likely I am using the wrong search terms. However, here is a pass at what I am trying to achieve
getPhoto(email: string): string
return this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
return res;
)
)
);
1
If you need token for each Http request (or conditionally) you must consider HttpInterceptor
– User3250
Nov 16 '18 at 3:04
add a comment |
I have a function that is currently working. When calling this function, it will set a value in the component. (user.userImage)
getLoggedInUserPhoto()
this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/me/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
this.user.userImage = res;
)
)
);
I am trying to do the same thing with a new function, except I want the function to return the value instead of setting a value in the component. I have searched all over and most likely I am using the wrong search terms. However, here is a pass at what I am trying to achieve
getPhoto(email: string): string
return this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
return res;
)
)
);
I have a function that is currently working. When calling this function, it will set a value in the component. (user.userImage)
getLoggedInUserPhoto()
this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/me/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
this.user.userImage = res;
)
)
);
I am trying to do the same thing with a new function, except I want the function to return the value instead of setting a value in the component. I have searched all over and most likely I am using the wrong search terms. However, here is a pass at what I am trying to achieve
getPhoto(email: string): string
return this.adalService.acquireToken('https://graph.microsoft.com')
.subscribe(token =>
let header = new HttpHeaders().set('Authorization', 'Bearer ' + token).set('Content-Type', 'image/jpeg');
this.imageService.getImage('https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header)
.subscribe(blob =>
this.imageService.getImageUrlFromBlob(blob)
.then(res =>
return res;
)
)
);
asked Nov 16 '18 at 2:50
Brian SmithBrian Smith
15615
15615
1
If you need token for each Http request (or conditionally) you must consider HttpInterceptor
– User3250
Nov 16 '18 at 3:04
add a comment |
1
If you need token for each Http request (or conditionally) you must consider HttpInterceptor
– User3250
Nov 16 '18 at 3:04
1
1
If you need token for each Http request (or conditionally) you must consider HttpInterceptor
– User3250
Nov 16 '18 at 3:04
If you need token for each Http request (or conditionally) you must consider HttpInterceptor
– User3250
Nov 16 '18 at 3:04
add a comment |
2 Answers
2
active
oldest
votes
I would suggest you to use switchMap ,since switchMap operator will wait for the response of the first request to arrive before firing the second request.
return this.http.get('https://graph.microsoft.com')
.switchMap(res1 =>
// use res1 to further control param of the second call
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
.subscribe(res2 =>
//do stuff with the second response
)
add a comment |
You should use merge map in the pipe. Then you can do what you are trying to do. when using merge map it wait one subscription to finish and then you can use it response in next action.
return this.adalService.acquireToken('https://graph.microsoft.com').
pipe(
mergeMap(res =>
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
).subscribe(res =>
//this "res" give you the second request respond
)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330728%2freturn-value-from-multiple-observable-calls-in-a-function%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
I would suggest you to use switchMap ,since switchMap operator will wait for the response of the first request to arrive before firing the second request.
return this.http.get('https://graph.microsoft.com')
.switchMap(res1 =>
// use res1 to further control param of the second call
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
.subscribe(res2 =>
//do stuff with the second response
)
add a comment |
I would suggest you to use switchMap ,since switchMap operator will wait for the response of the first request to arrive before firing the second request.
return this.http.get('https://graph.microsoft.com')
.switchMap(res1 =>
// use res1 to further control param of the second call
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
.subscribe(res2 =>
//do stuff with the second response
)
add a comment |
I would suggest you to use switchMap ,since switchMap operator will wait for the response of the first request to arrive before firing the second request.
return this.http.get('https://graph.microsoft.com')
.switchMap(res1 =>
// use res1 to further control param of the second call
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
.subscribe(res2 =>
//do stuff with the second response
)
I would suggest you to use switchMap ,since switchMap operator will wait for the response of the first request to arrive before firing the second request.
return this.http.get('https://graph.microsoft.com')
.switchMap(res1 =>
// use res1 to further control param of the second call
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
.subscribe(res2 =>
//do stuff with the second response
)
answered Nov 16 '18 at 2:55
SajeetharanSajeetharan
125k31181243
125k31181243
add a comment |
add a comment |
You should use merge map in the pipe. Then you can do what you are trying to do. when using merge map it wait one subscription to finish and then you can use it response in next action.
return this.adalService.acquireToken('https://graph.microsoft.com').
pipe(
mergeMap(res =>
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
).subscribe(res =>
//this "res" give you the second request respond
)
add a comment |
You should use merge map in the pipe. Then you can do what you are trying to do. when using merge map it wait one subscription to finish and then you can use it response in next action.
return this.adalService.acquireToken('https://graph.microsoft.com').
pipe(
mergeMap(res =>
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
).subscribe(res =>
//this "res" give you the second request respond
)
add a comment |
You should use merge map in the pipe. Then you can do what you are trying to do. when using merge map it wait one subscription to finish and then you can use it response in next action.
return this.adalService.acquireToken('https://graph.microsoft.com').
pipe(
mergeMap(res =>
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
).subscribe(res =>
//this "res" give you the second request respond
)
You should use merge map in the pipe. Then you can do what you are trying to do. when using merge map it wait one subscription to finish and then you can use it response in next action.
return this.adalService.acquireToken('https://graph.microsoft.com').
pipe(
mergeMap(res =>
this.http.get(''https://graph.microsoft.com/v1.0/users/'+email+'/photo/$value', header')
)
).subscribe(res =>
//this "res" give you the second request respond
)
answered Nov 16 '18 at 3:31
Rumes ShyamanRumes Shyaman
68211029
68211029
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53330728%2freturn-value-from-multiple-observable-calls-in-a-function%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
1
If you need token for each Http request (or conditionally) you must consider HttpInterceptor
– User3250
Nov 16 '18 at 3:04