问题描述
我继承了一些旧的RxJs 5
代码,闻起来很尴尬:
myFunc = (tag: TagModel): Observable<TagModel> => {
try {
const foundTag = this.mappedTags.find((x) => {
return x.name === tag;
});
const isAllowedToAdd = foundTag ? false : true;
return Observable
.of(tag)
.filter(() => isAllowedToAdd)
.mapTo(tag);
} catch (err) {
console.log("err: ",err);
}
}
该代码的目的是创建带有标签值(如果找到)的Observable,否则为空吗?它看起来太复杂了(加上一些我无法在此处分享的选择词)。
RxJs
引入了重大更改,其中of
和mapTo
不再可链接。这是重构的正确方法吗?
return of(tag)
.filter(() => isAllowedToAdd)
.pipe(mapTo(tag));
解决方法
下面应该工作
myFunc = (tag: TagModel): Observable<TagModel> => {
try {
const foundTag = this.mappedTags.find((x) => x.name === tag);
const isAllowedToAdd = !foundTag;
return of(tag).pipe(
filter(() => isAllowedToAdd)
)
} catch (err) {
console.log("err: ",err);
}
}
请记住包括import { of } from 'rxjs'
和import { filter } from 'rxjs/operators'