我有这个密码:
const id = 1;
of([{id: 1, name: 'abc'}]).pipe(
map(items => items.find(item => item.id === id)),
switchMap(item => item ? of(item) : this.makeHttpRequest(id))
);
makeHttpRequest(id: number): Observable<IdNamePair>{}
简而言之,
-
如果在数组中找到具有特定ID的对象,则返回Observable
的({id:1,name:'abc'})
-
如果在数组中找不到对象,则返回Observable
this.makehttprequest(id)方法
我想取消of(item)运算符。
这段代码可以工作,但是有没有一种方法不创建一个新的可观察对象并重用由“map()”创建的对象?
编辑:
export class MyService {
private _list = new BehaviorSubject([{id: 1, name: 'abc'}]);
list = this._list.asObservable();
findOne(id: number) {
this.list.pipe(
map(items => items.find(item => item.id === id)),
switchMap(item => item ? of(item) : this.makeHttpRequest(id))
);
}
}
在角度分量中:
export class MyComponent {
item$: Observable<IdNamePair>;
constructor(private service: MyService) {}
ngOnInit() {
this.item$ = this.service.findOne(1);
}
}