【发布时间】:2022-01-01 05:49:10
【问题描述】:
我想在我的服务中公开一个 observable,每次为 BehaviorSubject 分配一个值时(以及从列表中过滤它之后),它都会发出一个值。示例实现:
export class MyService {
// Given a list of all object
private readonly allObjects$: Observable<SomeObject[]>;
// An id of a SomeObject instance
private readonly mySubject = new BehaviorSubject<string|undefined>(undefined);
// Expose a single instance from the list of all objects.
public readonly myObject$: Observable<SomeObject|undefined>;
constructor() {
this.myObject$ =
// Pipe in the object id (i.e.: 123)
this.mySubject.pipe(
// Add the list of all objects
withLatestFrom(this.allObjects$),
// Filter out the object whose id is 123 from the list of objects. This filtered
// object should be the value emitted by myObject$.
switchMap(
(info: [string, SomeObject[]]) =>
info[1].filter(t => t.name === info[0])));
}
}
用法:
mySubject.next('123')
this.myObject$.subscribe(console.log) // prints: SomeObject(with id 123)
但是上面的 sn-p 会产生这个错误(对于withLatestFrom 运算符):
Argument of type 'OperatorFunction<string | undefined, [string | undefined,
SomeObject[]]>' is not assignable to parameter of type 'OperatorFunction<string |
undefined, [string, SomeObject[]]>'.
我做错了什么?我该如何解决这个问题?
【问题讨论】:
-
你到底想达到什么目的?
标签: angular rxjs rxjs-observables