RxJS是否有可忽略通知类型、统一执行回调的tap替代方案?
解决方案
1. 自定义anyTap操作符
这是最贴合你需求的方式,自己实现一个轻量操作符,不管Observable发出next、error还是complete通知,都会触发回调:
import { MonoTypeOperatorFunction, tap } from 'rxjs'; function anyTap<T>(callback: () => void): MonoTypeOperatorFunction<T> { return tap({ next: callback, error: callback, complete: callback }); }
之后就能像你期望的那样简洁使用:
something.pipe( anyTap(() => { this.isLoading = false; }) )
如果只需要响应next和error,删掉complete的配置即可。
2. 提取重复回调函数
如果不想额外定义操作符,最简单的方式是把重复的逻辑抽成单独函数,避免代码冗余:
const stopLoading = () => { this.isLoading = false; }; something.pipe( tap({ next: stopLoading, error: stopLoading }) )
3. 利用finalize操作符(适合单次Observable场景)
如果你的something是单次触发的Observable(比如HTTP请求),不管成功还是失败都会终止,finalize会在Observable完成或出错时执行回调,刚好匹配设置isLoading = false的场景:
something.pipe( finalize(() => { this.isLoading = false; }) )
注意:finalize只会在Observable终止(complete/error)时执行,不会响应next通知,所以如果Observable会多次发出next值,这个方法不适用。
内容的提问来源于stack exchange,提问作者ThaFog
相关产品推荐
相关产品推荐

