request.session
- это словарь, как любой другой, поэтому вы просто используете обычный механизм шаблона для атрибутов и членов:
{{ request.session.name }}
Не забудьте передать запрос в контекст шаблона или еще лучше убедитесь, что вы используете RequestContext и включили процессор контекстного запроса. См. документацию .
Вы можете использовать catchError :
Вам необходимо вернуть Observable
, поэтому позвоните непосредственно в службу _us:
this.verifyFacebookUser2() {
.catchError(() => this._us.facebookRegisterObs({"id_facebook": id}))
.subscribe((user: User) => {
alert('OK');
}
или измените значение registerIdFacebook на вернуть метод обслуживания:
registerIdFacebook(id) {
return this._us.facebookRegisterObs({"id_facebook": id})
.pipe(tap(
(resultado) => {
alert(JSON.stringify(resultado));
},
(error) => {
//TODO PRESENT TOAST
alert(JSON.stringify(error));
}));
}
this.verifyFacebookUser2() {
.catchError(() => this.registerIdFacebook(this.userId))
.subscribe((user: User) => {
alert('OK');
}
Я решил свой вопрос, и вот ответ:
1. Во-первых, мой сервис должен возвращать наблюдаемый, если статус ошибки 404:
verifyRegisterFacebookObs(user): Observable<any> {
let url = URL_SERVICIOS + '/users/verify';
return this.http2.post(url, user)
.map(res => res['result'])
.catch(error => {
if (error.status === 404)
return Observable.of("");
})
}
Я изменил свою функцию verifyFacebookUser
verifyFacebookUser (): Observable {let userFacebook = {"type": "facebook", "id_facebook": this.userId};
return this._us.verifyRegisterFacebookObs(userFacebook)
.flatMap(token => {
if (!token) {
return this._us.facebookRegisterObs({"id_facebook": this.userId}).flatMap(user => {
return Observable.fromPromise(this.storage.set('token', user.token));
})
}
else {
return Observable.fromPromise(this.storage.set('token', token));
}
}, error => {
error => console.log("FIRST ERROR" + JSON.stringify(error));
})
.flatMap(res => {
return Observable.fromPromise(this.storage.get('token'));
})
.flatMap(tokenStorage => {
let decodedToken = this.jwtHelper.decodeToken(JSON.stringify(tokenStorage));
let idUser = parseInt(decodedToken.id);
return this._ups.getUserProfileObs(idUser);
})
}
Как вы можете видеть, если токена не существует, я обращаюсь к this._us. facebookRegisterObs, немедленно сохраните токен для продолжения потока.
Наконец, я звоню так:
this.subscription=this.verifyFacebookUser()
.subscribe((user: User) => {
this.processDataObs(user);
loading.dismissAll();
}, error => {
console.log("Error on flow ---" + error);
loading.dismissAll();
this.presentToast("Ups... ha ocurrido un error con facebook");
})
Не забывайте отписываться:
ionViewWillLeave() {
if (this.subscription)
this.subscription.unsubscribe();
}