Какой оператор RxJS Observable для достижения ленивого / динамического поведения forkJoin - PullRequest
0 голосов
/ 03 мая 2018

Я ищу способ объединения RxJS Observables для выполнения следующих шагов в приложении Angular:

  1. Создание объекта Галереи на внутреннем сервере
  2. Загрузка фотографий, как они сделаны
  3. Обновление объекта Галереи на внутреннем сервере с отметкой времени
  4. Обновить страницу с результатами

У меня есть Observable photoObservable, который инкапсулирует компонент камеры, который завершается, когда компонент камеры закрыт.

Вот фрагмент кода, который у меня есть. Я наблюдаю за цепью Observable в середине:


    private photoObservable: Observable;
    private photoObserver: Observer;

    cameraClosed() {
      this.photoObserver.complete();
    }

    uploadPhotoFromCamera(data) {
      if (this.photoObservable == null) {

        this.photoObservable = new Observable((observer) => {
          this.photoObserver = observer;
        });

        this.galleryService.putGallery(...)
        .mergeMap(
          returnedGallery => {
            // This where I need to upload photos as they are taken
            // Each upload will return an Observable
          })
        .concatMap(
          returnedGallery => {
            this.galleryService.updateGallery(returnedGallery));
          }
        .subscribe(
          returnedGallery => {
            log('Gallery updated!');
          );
      }
      this.photoObserver.next(data);
    }

Я пробовал concat и concatMap, так как они оба полагаются на предыдущее завершение Observable до запуска следующего, но я не могу заставить его работать.

Есть ли способ добиться этого с помощью операторов RxJS? Может быть, какая-то смесь между Конкатом и Форкджоном?

...