RxJS if-else 类似管道过滤
Posted
技术标签:
【中文标题】RxJS if-else 类似管道过滤【英文标题】:RxJS if-else like pipe filtering 【发布时间】: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
但我需要第二件事;如果文件类型不是图像:
-
如果文件是图像,请调整图像大小并生成缩略图。
如果文件不是图像,则仅生成缩略图。
我怎样才能做到这一点?谢谢。
编辑:AJT_82 的评论
我真的不知道这里发生了什么。为什么要先创建一个可观察对象,对其进行管道传输、过滤等。
所以我试着让它更简单:
if (isImage(this.file))
this.resizeImage();
this.generateThumb();
return of(this);
失败了。
【问题讨论】:
您能告诉我们您为解决此问题所做的尝试吗? @AJT_82 检查编辑 【参考方案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。还是谢谢你。以上是关于RxJS if-else 类似管道过滤的主要内容,如果未能解决你的问题,请参考以下文章
从角度服务通过管道传输时,rxjs catchError 不起作用
当我尝试在 if-else 方法中使用动画骨架小部件时出现错误 '_debugLifecycleState != _ElementLifecycle.defunct': is not true。”
RxJs 管道和 lettable 运算符“map”:“void”类型的“this”上下文不可分配给“Observable<>”类型的方法“this”