How to handle an observable that may return empty when using switchMap RxJS
how should the following scenario be handled with RxJS?
I have an observable that queries my Firestore database for a submission by an ID extracted from the url parameters:
this.submission$ = this.db.collection$('submissions', ref => ref.where('submissionArtistUID', '==', this.artistParam));
For elements subscribed to this observable the submission$
returns an array of submission objects. Thus I can use switchMap
to query my users
table once the submission$
has resolved:
this.user$ = this.submission$.pipe(
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
However, the submissions query is not guaranteed to return anything. So when I used the switchMap
on a submission that returns empty, I cannot access the following property: submissions[0].submissionUserUID
, and I'm shown this error in console:
Cannot read property 'submissionUserUID' of undefined
Which makes sense because the submission$
resolves to an empty object before trying to be used in the return statement of the switchMap.
So how do I account for scenario like this using RxJS? Is switchMap the right thing to use? Thanks!
angular rxjs angularfire2
add a comment |
how should the following scenario be handled with RxJS?
I have an observable that queries my Firestore database for a submission by an ID extracted from the url parameters:
this.submission$ = this.db.collection$('submissions', ref => ref.where('submissionArtistUID', '==', this.artistParam));
For elements subscribed to this observable the submission$
returns an array of submission objects. Thus I can use switchMap
to query my users
table once the submission$
has resolved:
this.user$ = this.submission$.pipe(
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
However, the submissions query is not guaranteed to return anything. So when I used the switchMap
on a submission that returns empty, I cannot access the following property: submissions[0].submissionUserUID
, and I'm shown this error in console:
Cannot read property 'submissionUserUID' of undefined
Which makes sense because the submission$
resolves to an empty object before trying to be used in the return statement of the switchMap.
So how do I account for scenario like this using RxJS? Is switchMap the right thing to use? Thanks!
angular rxjs angularfire2
add a comment |
how should the following scenario be handled with RxJS?
I have an observable that queries my Firestore database for a submission by an ID extracted from the url parameters:
this.submission$ = this.db.collection$('submissions', ref => ref.where('submissionArtistUID', '==', this.artistParam));
For elements subscribed to this observable the submission$
returns an array of submission objects. Thus I can use switchMap
to query my users
table once the submission$
has resolved:
this.user$ = this.submission$.pipe(
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
However, the submissions query is not guaranteed to return anything. So when I used the switchMap
on a submission that returns empty, I cannot access the following property: submissions[0].submissionUserUID
, and I'm shown this error in console:
Cannot read property 'submissionUserUID' of undefined
Which makes sense because the submission$
resolves to an empty object before trying to be used in the return statement of the switchMap.
So how do I account for scenario like this using RxJS? Is switchMap the right thing to use? Thanks!
angular rxjs angularfire2
how should the following scenario be handled with RxJS?
I have an observable that queries my Firestore database for a submission by an ID extracted from the url parameters:
this.submission$ = this.db.collection$('submissions', ref => ref.where('submissionArtistUID', '==', this.artistParam));
For elements subscribed to this observable the submission$
returns an array of submission objects. Thus I can use switchMap
to query my users
table once the submission$
has resolved:
this.user$ = this.submission$.pipe(
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
However, the submissions query is not guaranteed to return anything. So when I used the switchMap
on a submission that returns empty, I cannot access the following property: submissions[0].submissionUserUID
, and I'm shown this error in console:
Cannot read property 'submissionUserUID' of undefined
Which makes sense because the submission$
resolves to an empty object before trying to be used in the return statement of the switchMap.
So how do I account for scenario like this using RxJS? Is switchMap the right thing to use? Thanks!
angular rxjs angularfire2
angular rxjs angularfire2
asked Nov 13 '18 at 4:17
Jordan LewallenJordan Lewallen
479311
479311
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
You can use filter operator before switchmap. Your code might look like this.
this.user$ = this.submission$.pipe(
filter(submissions => Object.keys(submissions).length > 0),
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
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%2f53273736%2fhow-to-handle-an-observable-that-may-return-empty-when-using-switchmap-rxjs%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
You can use filter operator before switchmap. Your code might look like this.
this.user$ = this.submission$.pipe(
filter(submissions => Object.keys(submissions).length > 0),
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
add a comment |
You can use filter operator before switchmap. Your code might look like this.
this.user$ = this.submission$.pipe(
filter(submissions => Object.keys(submissions).length > 0),
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
add a comment |
You can use filter operator before switchmap. Your code might look like this.
this.user$ = this.submission$.pipe(
filter(submissions => Object.keys(submissions).length > 0),
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
You can use filter operator before switchmap. Your code might look like this.
this.user$ = this.submission$.pipe(
filter(submissions => Object.keys(submissions).length > 0),
switchMap(
(submissions) =>
return this.db.collection$('users', ref => ref.where('userUID', '==', submissions[0].submissionUserUID ))
)
)
edited Nov 13 '18 at 6:21
CozyAzure
5,37841836
5,37841836
answered Nov 13 '18 at 4:44
KiraAGKiraAG
391110
391110
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
add a comment |
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
very concise, filter did the trick! Thanks for teaching me an application of that operator :)
– Jordan Lewallen
Nov 13 '18 at 4:53
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
Awesome. Glad to help
– KiraAG
Nov 13 '18 at 5:00
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%2f53273736%2fhow-to-handle-an-observable-that-may-return-empty-when-using-switchmap-rxjs%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