How to reduce observable pipelines when fetching user information along with user posts?
Here is my code with 2 services, one is messageService
which is used to get user messages and the other is usersService
used to get user information based on user_id
:
this.messageService.getMessages()
.switchMap(response => {
let resArray: any = response.map(
post => {
return Observable.zip(
this.usersService.getUser(post.user_id),
Observable.of(post)
);
});
return Observable.merge(...resArray)
}).switchMap(res => {
res[1]['user'] = res[0];
this.messages.push(res[1]);
return Observable.of(res[1]);
})
.subscribe(final_post => {
console.log('final post:', final_post)
})
I suppose using merge
and then again swtichMap
to merge these data is not optimal and best practice.
The question is how should I get user messages using Observable
and then getting users information for each message (each message may have different user information), then merging them into one object which finally will be used in the desired component.
javascript angular-2+
New contributor
add a comment |
Here is my code with 2 services, one is messageService
which is used to get user messages and the other is usersService
used to get user information based on user_id
:
this.messageService.getMessages()
.switchMap(response => {
let resArray: any = response.map(
post => {
return Observable.zip(
this.usersService.getUser(post.user_id),
Observable.of(post)
);
});
return Observable.merge(...resArray)
}).switchMap(res => {
res[1]['user'] = res[0];
this.messages.push(res[1]);
return Observable.of(res[1]);
})
.subscribe(final_post => {
console.log('final post:', final_post)
})
I suppose using merge
and then again swtichMap
to merge these data is not optimal and best practice.
The question is how should I get user messages using Observable
and then getting users information for each message (each message may have different user information), then merging them into one object which finally will be used in the desired component.
javascript angular-2+
New contributor
add a comment |
Here is my code with 2 services, one is messageService
which is used to get user messages and the other is usersService
used to get user information based on user_id
:
this.messageService.getMessages()
.switchMap(response => {
let resArray: any = response.map(
post => {
return Observable.zip(
this.usersService.getUser(post.user_id),
Observable.of(post)
);
});
return Observable.merge(...resArray)
}).switchMap(res => {
res[1]['user'] = res[0];
this.messages.push(res[1]);
return Observable.of(res[1]);
})
.subscribe(final_post => {
console.log('final post:', final_post)
})
I suppose using merge
and then again swtichMap
to merge these data is not optimal and best practice.
The question is how should I get user messages using Observable
and then getting users information for each message (each message may have different user information), then merging them into one object which finally will be used in the desired component.
javascript angular-2+
New contributor
Here is my code with 2 services, one is messageService
which is used to get user messages and the other is usersService
used to get user information based on user_id
:
this.messageService.getMessages()
.switchMap(response => {
let resArray: any = response.map(
post => {
return Observable.zip(
this.usersService.getUser(post.user_id),
Observable.of(post)
);
});
return Observable.merge(...resArray)
}).switchMap(res => {
res[1]['user'] = res[0];
this.messages.push(res[1]);
return Observable.of(res[1]);
})
.subscribe(final_post => {
console.log('final post:', final_post)
})
I suppose using merge
and then again swtichMap
to merge these data is not optimal and best practice.
The question is how should I get user messages using Observable
and then getting users information for each message (each message may have different user information), then merging them into one object which finally will be used in the desired component.
javascript angular-2+
javascript angular-2+
New contributor
New contributor
New contributor
asked 3 mins ago
ALH
1012
1012
New contributor
New contributor
add a comment |
add a comment |
active
oldest
votes
Your Answer
StackExchange.ifUsing("editor", function () {
return StackExchange.using("mathjaxEditing", function () {
StackExchange.MarkdownEditor.creationCallbacks.add(function (editor, postfix) {
StackExchange.mathjaxEditing.prepareWmdForMathJax(editor, postfix, [["\$", "\$"]]);
});
});
}, "mathjax-editing");
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: "196"
};
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: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
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
});
}
});
ALH is a new contributor. Be nice, and check out our Code of Conduct.
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%2fcodereview.stackexchange.com%2fquestions%2f210358%2fhow-to-reduce-observable-pipelines-when-fetching-user-information-along-with-use%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
ALH is a new contributor. Be nice, and check out our Code of Conduct.
ALH is a new contributor. Be nice, and check out our Code of Conduct.
ALH is a new contributor. Be nice, and check out our Code of Conduct.
ALH is a new contributor. Be nice, and check out our Code of Conduct.
Thanks for contributing an answer to Code Review Stack Exchange!
- 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.
Use MathJax to format equations. MathJax reference.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- 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%2fcodereview.stackexchange.com%2fquestions%2f210358%2fhow-to-reduce-observable-pipelines-when-fetching-user-information-along-with-use%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