Как я могу прервать свой поток на моей наблюдаемой, чтобы вызвать другую наблюдаемую с RXJS?

request.session - это словарь, как любой другой, поэтому вы просто используете обычный механизм шаблона для атрибутов и членов:

{{ request.session.name }}

Не забудьте передать запрос в контекст шаблона или еще лучше убедитесь, что вы используете RequestContext и включили процессор контекстного запроса. См. документацию .

0
задан SDLUJO 18 January 2019 в 12:34
поделиться

2 ответа

Вы можете использовать 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');
} 
0
ответ дан Florian 18 January 2019 в 12:34
поделиться

Я решил свой вопрос, и вот ответ:

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("");
      })
  }
  1. Я изменил свою функцию 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();
  }
0
ответ дан SDLUJO 18 January 2019 в 12:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: