有人可以告诉我带有条件操作的 rxjs 管道的正确语法是什么吗?
在这种情况下,如果环境名称数组长度不为 1,我想使用过滤器进行映射。如何使用不返回的 if 语句?是否有任何 rxjs 运算符?
environmentName = ['env1', 'env2'];
sourceList$ = this.getSources().pipe(
tap((srcList) => console.log(srcList)), //[["stylesheet","env1-xyz"],["include","cable"],...]
// if(this.environmentName.length!==1){
map((sourceList) => sourceList.filter((scr) => scr[1].startsWith(this.environmentName[0]) || scr[0] === 'include')),
//}
repeatWhen(() => this.sourceListChanged$)
);
提及iif
不是运营商。使用例如mergeMap
将其合并到您的代码中:
environmentName = ['env1', 'env2'];
const filterSourceListByEnv1OrInclude = srcList => srcList.filter((scr) => scr[1].startsWith(this.environmentName[0]) || scr[0] === 'include');
sourceList$ = this.getSources().pipe(
tap((srcList) => console.log(srcList)),
mergeMap(srcList => iff(
() => this.environmentName.length !== 1,
of(filterSourceListByEnv1OrInclude(srcList)),
of(srcList)
)),
repeatWhen(() => this.sourceListChanged$)
);
或者可以使用三元运算符代替iif
:
sourceList$ = this.getSources().pipe(
tap((srcList) => console.log(srcList)),
mergeMap(srcList => of(this.environmentName.length !== 1
? filterSourceListByEnv1OrInclude(srcList)
: srcList
)),
repeatWhen(() => this.sourceListChanged$)
);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)