【问题标题】:RxJS if-else like pipe filteringRxJS if-else 类似管道过滤
【发布时间】:2019-07-01 23:59:50
【问题描述】:

我不擅长 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);

失败了。

【问题讨论】:

  • 您能告诉我们您为解决此问题所做的尝试吗?
  • @AJT_82 检查编辑

标签: node.js angular rxjs


【解决方案1】:

我认为你可以使用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 应用于合并的 observable

link to docs

【讨论】:

  • 我现在要出去了,等我回来再试试。谢谢。
  • 你试过了吗?
  • 对不起,伙计,我忘记了这篇文章。我没有尝试你的方式,因为我不再需要了,因为我的问题实际上是由我使用的库上的错误引起的。我试图修复它,但最后我找到了一种方法来修复它,添加一个 if else。还是谢谢你。
猜你喜欢
  • 2019-08-21
  • 2021-10-08
  • 1970-01-01
  • 1970-01-01
  • 2021-02-13
  • 2012-07-24
  • 1970-01-01
  • 1970-01-01
  • 2020-04-09
相关资源
最近更新 更多