У меня есть поток nex с наблюдаемым:
verifyFacebookUser2(): Observable<User> {
let userFacebook = {"type": "facebook", "id_facebook": this.userId};
return this._us.verifyRegisterFacebookObs(userFacebook )
.flatMap(token => {
if (!token) {
return Observable.of([])
}
else {
return Observable.fromPromise(this.storage.set('token', token));
}
}, error => {
error => console.log("FIRST ERROR" + JSON.stringify(error));
})
.catch(err => {
if (err.status === 404) {
throw new Error("404");
} else {
throw new Error("");
}
//return Observable.of([])
})
.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);
})
}
Как вы можете видеть, мой наблюдаемый пользователь возврата, если все потоки в порядке, мой сервис verifyRegisterFacebookObs возвращает пользователя:
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("");
})*/
}
Итак, этот поток хорошо работает, когда все в порядке, но как я могу выполнить другой поток или наблюдаемый, если мой сервис вернет ошибку 404.
Если моя служба возвращает ошибку 404, это означает, что пользователь не существует, и мне нужно зарегистрировать этого пользователя, вызывая новый запрос http
, чтобы использовать следующее:
this.verifyFacebookUser2()
.subscribe((user: User) => {
alert("OK");
}, error => {
alert(error);
// Can I call another function that call observable to do another flow ?
this.registerIdFacebook(this.userId);
})
Если все в порядке, напечатайте хорошо, если я получаю ошибку, мне нужно позвонить registerIdFacebook, поэтому я звоню в registerIdFacebook только тогда, когда ошибка генерируется this._us.verifyRegisterFacebookObs (userFacebook) и его 404.
registerIdFacebook(id) {
this._us.facebookRegisterObs({"id_facebook": id}).
subscribe(resultado => {
alert(JSON.stringify(resultado));
}, error => {
//TODO PRESENT TOAST
alert(JSON.stringify(error));
})
}
Может ли кто-нибудь помочь мне достичь этого?