2 Наблюдатели и должны вернуть одного из них в соответствии со значением - PullRequest
0 голосов
/ 25 марта 2019

Я новичок в Angular, работаю с Angular 4 и Ionic 3. У меня есть метод, который должен вернуть Observable.

В этом методе мне нужно выбрать наблюдаемый товар между 2 в соответствии со значением первого.

Я пытался выполнить несколько способов, но я не согласен с асинхронизмом.

Следующий код не работает из-за асинхронизма, но я не нашел другого способа.

let obs: Observable<T>;
let localFile: FileBase64Model;
/* This will get my first observer I got to check his value */
obs = this.localDataBaseSrv.getQualityCheckpointFile(fileId) as Observable<T>;
    return obs.pipe(
      map(file => {
        // If observer value is not true I got to return another observer
        if(!file) {              
          // I cannot return observable here, so I'm trying to get value of other observable and put it in my observable that will be return
          this.get(`/${fileId}`, undefined, body).subscribe(value =>     localFile = value as FileBase64Model);
        } else {
          return file;
        }
      }),
      map( file =>  {
        // When code is here, the localFile is not yet complete because of asynchronous subscribe method !
        if(!file) {              
          return localFile;
        } else {
          return file;
        }
      })
    );

Может ли кто-нибудь мне помочь?

1 Ответ

1 голос
/ 25 марта 2019

Попробуйте это:

obs = this.localDataBaseSrv.getQualityCheckpointFile(fileId) as Observable<T>;
    return obs.pipe(
      mergeMap(file => {
        // If observer value is not true I got to return another observer
        if(!file) {              
          return this.get(`/${fileId}`, yourOptions);
        } else {
          return of(file);
        }
      })
    );

Это использует оператор выравнивания mergeMap, чтобы вы не возвращали Observable of Observable при выполнении запроса get(), а также он служит вашей цели.

...