Angular 6 - Rxjs - Nested Observables
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ height:90px;width:728px;box-sizing:border-box;
}
I have the following code in Angular 6, and I would need to solve some nested observables when I use localforage and http request.
myservice.ts:
getRemoteInformation(action: string): Observable<any> {
return this._loginService.getUserData()
.pipe(
concatMap(userData=> {
var parameters = "?IdUser=" + userData.idUser+ "&userCode=" + userData.userCode;
const header = new HttpHeaders().set('Authorization', "Bearer "+userData.token);
return this._http.get(this.url + action + parameters, { headers: header });
}
)
);
}
loginservice.ts:
getUserData()
{
var promiseUserData= localForage.getItem<UserData>("dataUser");
var userData= from(promiseUserData);
return userData.pipe(concatMap(dv=>
{
var expireDate = moment(dv.Expire) ;
var nowDate = moment().subtract(1,'hours');
if(expireDate.isAfter(nowDate))
{
console.log("searching new token");
return this.login(new LoginData(dv.idUser,dv.userCode))
}
else
{
console.log("using local token")
return localForage.getItem<UserData>("dataUser");
}
}));
}
login(data: LoginData): Observable<any> {
let header = new HttpHeaders().set('content-type', 'application/json');
var body;
body = JSON.stringify(data);
console.log(this.url + "/Login/AuthenticateUserAsync");
return this._http.post(this.url + "/Login/AuthenticateUserAsync", body, { headers: header });
}
When I call getRemoteInformation() and I do not need a new token, everything works perfect.
The problem arises when I need a new token, which is requested through the login() method, and despite being using concatMap(), the getRemoteInformation() method does not wait for the observable "getUserData()" to end.
What ends in an http call with parameters "undefined".
I hope I can receive your help and apologies for my bad English, thank you!
angular typescript rxjs observable
add a comment |
I have the following code in Angular 6, and I would need to solve some nested observables when I use localforage and http request.
myservice.ts:
getRemoteInformation(action: string): Observable<any> {
return this._loginService.getUserData()
.pipe(
concatMap(userData=> {
var parameters = "?IdUser=" + userData.idUser+ "&userCode=" + userData.userCode;
const header = new HttpHeaders().set('Authorization', "Bearer "+userData.token);
return this._http.get(this.url + action + parameters, { headers: header });
}
)
);
}
loginservice.ts:
getUserData()
{
var promiseUserData= localForage.getItem<UserData>("dataUser");
var userData= from(promiseUserData);
return userData.pipe(concatMap(dv=>
{
var expireDate = moment(dv.Expire) ;
var nowDate = moment().subtract(1,'hours');
if(expireDate.isAfter(nowDate))
{
console.log("searching new token");
return this.login(new LoginData(dv.idUser,dv.userCode))
}
else
{
console.log("using local token")
return localForage.getItem<UserData>("dataUser");
}
}));
}
login(data: LoginData): Observable<any> {
let header = new HttpHeaders().set('content-type', 'application/json');
var body;
body = JSON.stringify(data);
console.log(this.url + "/Login/AuthenticateUserAsync");
return this._http.post(this.url + "/Login/AuthenticateUserAsync", body, { headers: header });
}
When I call getRemoteInformation() and I do not need a new token, everything works perfect.
The problem arises when I need a new token, which is requested through the login() method, and despite being using concatMap(), the getRemoteInformation() method does not wait for the observable "getUserData()" to end.
What ends in an http call with parameters "undefined".
I hope I can receive your help and apologies for my bad English, thank you!
angular typescript rxjs observable
Can you create a minimum reproduction on stackblitz
– Sachin Gupta
Nov 22 '18 at 5:05
Have you checked this? stackoverflow.com/questions/34907151/…
– Davy
Nov 22 '18 at 9:07
Thanks @Davy , that helped me a lot :) problem solved
– RangerCode
Nov 26 '18 at 16:07
Welcome, you are ;)
– Davy
Nov 27 '18 at 6:25
add a comment |
I have the following code in Angular 6, and I would need to solve some nested observables when I use localforage and http request.
myservice.ts:
getRemoteInformation(action: string): Observable<any> {
return this._loginService.getUserData()
.pipe(
concatMap(userData=> {
var parameters = "?IdUser=" + userData.idUser+ "&userCode=" + userData.userCode;
const header = new HttpHeaders().set('Authorization', "Bearer "+userData.token);
return this._http.get(this.url + action + parameters, { headers: header });
}
)
);
}
loginservice.ts:
getUserData()
{
var promiseUserData= localForage.getItem<UserData>("dataUser");
var userData= from(promiseUserData);
return userData.pipe(concatMap(dv=>
{
var expireDate = moment(dv.Expire) ;
var nowDate = moment().subtract(1,'hours');
if(expireDate.isAfter(nowDate))
{
console.log("searching new token");
return this.login(new LoginData(dv.idUser,dv.userCode))
}
else
{
console.log("using local token")
return localForage.getItem<UserData>("dataUser");
}
}));
}
login(data: LoginData): Observable<any> {
let header = new HttpHeaders().set('content-type', 'application/json');
var body;
body = JSON.stringify(data);
console.log(this.url + "/Login/AuthenticateUserAsync");
return this._http.post(this.url + "/Login/AuthenticateUserAsync", body, { headers: header });
}
When I call getRemoteInformation() and I do not need a new token, everything works perfect.
The problem arises when I need a new token, which is requested through the login() method, and despite being using concatMap(), the getRemoteInformation() method does not wait for the observable "getUserData()" to end.
What ends in an http call with parameters "undefined".
I hope I can receive your help and apologies for my bad English, thank you!
angular typescript rxjs observable
I have the following code in Angular 6, and I would need to solve some nested observables when I use localforage and http request.
myservice.ts:
getRemoteInformation(action: string): Observable<any> {
return this._loginService.getUserData()
.pipe(
concatMap(userData=> {
var parameters = "?IdUser=" + userData.idUser+ "&userCode=" + userData.userCode;
const header = new HttpHeaders().set('Authorization', "Bearer "+userData.token);
return this._http.get(this.url + action + parameters, { headers: header });
}
)
);
}
loginservice.ts:
getUserData()
{
var promiseUserData= localForage.getItem<UserData>("dataUser");
var userData= from(promiseUserData);
return userData.pipe(concatMap(dv=>
{
var expireDate = moment(dv.Expire) ;
var nowDate = moment().subtract(1,'hours');
if(expireDate.isAfter(nowDate))
{
console.log("searching new token");
return this.login(new LoginData(dv.idUser,dv.userCode))
}
else
{
console.log("using local token")
return localForage.getItem<UserData>("dataUser");
}
}));
}
login(data: LoginData): Observable<any> {
let header = new HttpHeaders().set('content-type', 'application/json');
var body;
body = JSON.stringify(data);
console.log(this.url + "/Login/AuthenticateUserAsync");
return this._http.post(this.url + "/Login/AuthenticateUserAsync", body, { headers: header });
}
When I call getRemoteInformation() and I do not need a new token, everything works perfect.
The problem arises when I need a new token, which is requested through the login() method, and despite being using concatMap(), the getRemoteInformation() method does not wait for the observable "getUserData()" to end.
What ends in an http call with parameters "undefined".
I hope I can receive your help and apologies for my bad English, thank you!
angular typescript rxjs observable
angular typescript rxjs observable
asked Nov 22 '18 at 4:28
RangerCodeRangerCode
1112
1112
Can you create a minimum reproduction on stackblitz
– Sachin Gupta
Nov 22 '18 at 5:05
Have you checked this? stackoverflow.com/questions/34907151/…
– Davy
Nov 22 '18 at 9:07
Thanks @Davy , that helped me a lot :) problem solved
– RangerCode
Nov 26 '18 at 16:07
Welcome, you are ;)
– Davy
Nov 27 '18 at 6:25
add a comment |
Can you create a minimum reproduction on stackblitz
– Sachin Gupta
Nov 22 '18 at 5:05
Have you checked this? stackoverflow.com/questions/34907151/…
– Davy
Nov 22 '18 at 9:07
Thanks @Davy , that helped me a lot :) problem solved
– RangerCode
Nov 26 '18 at 16:07
Welcome, you are ;)
– Davy
Nov 27 '18 at 6:25
Can you create a minimum reproduction on stackblitz
– Sachin Gupta
Nov 22 '18 at 5:05
Can you create a minimum reproduction on stackblitz
– Sachin Gupta
Nov 22 '18 at 5:05
Have you checked this? stackoverflow.com/questions/34907151/…
– Davy
Nov 22 '18 at 9:07
Have you checked this? stackoverflow.com/questions/34907151/…
– Davy
Nov 22 '18 at 9:07
Thanks @Davy , that helped me a lot :) problem solved
– RangerCode
Nov 26 '18 at 16:07
Thanks @Davy , that helped me a lot :) problem solved
– RangerCode
Nov 26 '18 at 16:07
Welcome, you are ;)
– Davy
Nov 27 '18 at 6:25
Welcome, you are ;)
– Davy
Nov 27 '18 at 6:25
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%2f53423901%2fangular-6-rxjs-nested-observables%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%2f53423901%2fangular-6-rxjs-nested-observables%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
Can you create a minimum reproduction on stackblitz
– Sachin Gupta
Nov 22 '18 at 5:05
Have you checked this? stackoverflow.com/questions/34907151/…
– Davy
Nov 22 '18 at 9:07
Thanks @Davy , that helped me a lot :) problem solved
– RangerCode
Nov 26 '18 at 16:07
Welcome, you are ;)
– Davy
Nov 27 '18 at 6:25