RxJS if-else как труба - PullRequest
       2

RxJS if-else как труба

0 голосов
/ 07 февраля 2019

Я плохо разбираюсь в JS и RxJS, поэтому, если мой вопрос глуп, извините.

У меня есть этот код;не написано мной:

  prepare(): Observable<any> {
    const i = of({}).pipe(
      // Check if file type is image
      filter(() => isImage(this.file)),
      switchMap(() => this.generateThumb()),
      switchMap(() => this.resizeImage()),
      take(1)
    );

    return i
  }

Но мне нужна вторая вещь;если тип файла НЕ является изображением:

  1. Если файл является изображением, измените размер изображения и создайте миниатюру.
  2. Если файл НЕ является изображением, генерируется только миниатюра.

Как мне этого добиться?Спасибо.

РЕДАКТИРОВАТЬ: за комментарий AJT_82

Я действительно не знаю, что здесь происходит.Зачем сначала создавать наблюдаемое, передавать его по каналам, фильтровать и т. Д.

Поэтому я попытался упростить его:

if (isImage(this.file)) {
    this.resizeImage();
}
this.generateThumb();

return of(this);

, что не получилось.

1 Ответ

0 голосов
/ 07 февраля 2019

Я думаю, вы можете использовать partition оператор:

Он должен выглядеть так:

const source = of({});
const [images, notImages] = source.pipe(partition(() => isImage(this.file));

merge(
  images.pipe(
    switchMap(() => this.resizeImage()),
  )
  notImages
)
.pipe(switchMap(() => this.generateThumb())),
.subscribe(...);

Раздел будет.дает вам наблюдаемые изображения и второе наблюдаемое noImages

Применить resizeImages к изображениям, объединить изображения с noImages и применить generateThumb к объединенным наблюдаемым

ссылка на документы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...