RxJS如何在Pipe内处理条件逻辑 无需subscribe仍可使用async管道
你只需要把判断逻辑迁移到map操作符内部即可,无需改用subscribe,依然可以保留Observable类型配合async管道使用,实现代码如下:
leadChanged$: Observable<LeadModel>; this.leadChanged$ = this.leadsDataService.leadChanged$.pipe( map((res) => { // 直接复用原subscribe内的条件逻辑,返回构造后的对象即可 if (res?.isManualLead) { return { ...res, }; } else { return { ...res, alert: { ...res.alert, transcript: highlightKeywordsLeadFunction(this.lead) }, }; } }) );
如果需要避免res为空导致的运行报错,可以在pipe中提前新增filter操作符过滤空值:
import { filter } from 'rxjs'; this.leadChanged$ = this.leadsDataService.leadChanged$.pipe( filter(res => !!res), // 过滤掉null/undefined的异常值 map((res) => { // 经过filter后res必然存在,无需再使用可选链判断 if (res.isManualLead) { return { ...res }; } return { ...res, alert: { ...res.alert, transcript: highlightKeywordsLeadFunction(this.lead) } }; }) );
内容的提问来源于stack exchange,提问作者Sampath
相关产品推荐
相关产品推荐

