mergeMap an Observable with array value
I want to map the values of an array from an Observable with additional data.
For example: I have a team (of users) and the values I receive from the service contains an array of users. But before I assign this list to a local variable I would like to add additional data to the User objects (let's say the amount of goals a User has made).
public team: Array<User> = ;
this.userService.getCurrentTeam()
// the result is an array of users: [{id: 1, name: 'John'}, {id: 6, name: 'Jane'}, ...]
.mergeMap(people => people) // flatten the array
.mergeMap(person => {
return this.gameService.getGoalsForUser(person);
}).subscribe((team) => {
this.people = team; // this won't work: see below
});
As the result of getCurrentTeam() is an array of Users I first need to break up (flatten) this array (done with the first mergeMap) to be able to get the goals for every user in the mergeMap function.
To make the above block work the subscribe function needs to be rewritten as the team
variable is not an array anymore:
subscribe((person) => { this.team.push(person); } );
The problem with this subscription is that whenever the data changes, a duplicate user can be pushed into the team array.
I have two questions regarding this concept:
- How can I make the additional requests for the individual users without breaking up the array (in the first mergeMap function)
- Can I keep my array in the subscribe function? (
this.people = team;
)
arrays angularjs typescript ionic-framework observable
add a comment |
I want to map the values of an array from an Observable with additional data.
For example: I have a team (of users) and the values I receive from the service contains an array of users. But before I assign this list to a local variable I would like to add additional data to the User objects (let's say the amount of goals a User has made).
public team: Array<User> = ;
this.userService.getCurrentTeam()
// the result is an array of users: [{id: 1, name: 'John'}, {id: 6, name: 'Jane'}, ...]
.mergeMap(people => people) // flatten the array
.mergeMap(person => {
return this.gameService.getGoalsForUser(person);
}).subscribe((team) => {
this.people = team; // this won't work: see below
});
As the result of getCurrentTeam() is an array of Users I first need to break up (flatten) this array (done with the first mergeMap) to be able to get the goals for every user in the mergeMap function.
To make the above block work the subscribe function needs to be rewritten as the team
variable is not an array anymore:
subscribe((person) => { this.team.push(person); } );
The problem with this subscription is that whenever the data changes, a duplicate user can be pushed into the team array.
I have two questions regarding this concept:
- How can I make the additional requests for the individual users without breaking up the array (in the first mergeMap function)
- Can I keep my array in the subscribe function? (
this.people = team;
)
arrays angularjs typescript ionic-framework observable
add a comment |
I want to map the values of an array from an Observable with additional data.
For example: I have a team (of users) and the values I receive from the service contains an array of users. But before I assign this list to a local variable I would like to add additional data to the User objects (let's say the amount of goals a User has made).
public team: Array<User> = ;
this.userService.getCurrentTeam()
// the result is an array of users: [{id: 1, name: 'John'}, {id: 6, name: 'Jane'}, ...]
.mergeMap(people => people) // flatten the array
.mergeMap(person => {
return this.gameService.getGoalsForUser(person);
}).subscribe((team) => {
this.people = team; // this won't work: see below
});
As the result of getCurrentTeam() is an array of Users I first need to break up (flatten) this array (done with the first mergeMap) to be able to get the goals for every user in the mergeMap function.
To make the above block work the subscribe function needs to be rewritten as the team
variable is not an array anymore:
subscribe((person) => { this.team.push(person); } );
The problem with this subscription is that whenever the data changes, a duplicate user can be pushed into the team array.
I have two questions regarding this concept:
- How can I make the additional requests for the individual users without breaking up the array (in the first mergeMap function)
- Can I keep my array in the subscribe function? (
this.people = team;
)
arrays angularjs typescript ionic-framework observable
I want to map the values of an array from an Observable with additional data.
For example: I have a team (of users) and the values I receive from the service contains an array of users. But before I assign this list to a local variable I would like to add additional data to the User objects (let's say the amount of goals a User has made).
public team: Array<User> = ;
this.userService.getCurrentTeam()
// the result is an array of users: [{id: 1, name: 'John'}, {id: 6, name: 'Jane'}, ...]
.mergeMap(people => people) // flatten the array
.mergeMap(person => {
return this.gameService.getGoalsForUser(person);
}).subscribe((team) => {
this.people = team; // this won't work: see below
});
As the result of getCurrentTeam() is an array of Users I first need to break up (flatten) this array (done with the first mergeMap) to be able to get the goals for every user in the mergeMap function.
To make the above block work the subscribe function needs to be rewritten as the team
variable is not an array anymore:
subscribe((person) => { this.team.push(person); } );
The problem with this subscription is that whenever the data changes, a duplicate user can be pushed into the team array.
I have two questions regarding this concept:
- How can I make the additional requests for the individual users without breaking up the array (in the first mergeMap function)
- Can I keep my array in the subscribe function? (
this.people = team;
)
arrays angularjs typescript ionic-framework observable
arrays angularjs typescript ionic-framework observable
asked Jan 2 at 18:50
Hans VnHans Vn
5741131
5741131
add a comment |
add a comment |
0
active
oldest
votes
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%2f54011635%2fmergemap-an-observable-with-array-value%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
0
active
oldest
votes
0
active
oldest
votes
active
oldest
votes
active
oldest
votes
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%2f54011635%2fmergemap-an-observable-with-array-value%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