如何解决结合 combineLatest 和 switchMap 时未定义
我正在尝试将两个 Observable 组合起来,以便为接受两个值的服务方法的调用提供很少的值。但在这里我几乎没有错误
-
'([filter,sort]: [string,string]) => void' 类型的参数不可分配给'(value: [string,string],index: number) 类型的参数 =>可观察输入'。 类型“void”不可分配给类型“ObservableInput”。
-
在控制台 -
您在需要流的地方提供了“未定义”。您可以提供 Observable、Promise、Array 或 Iterable。 在 subscribeto (subscribeto.js:27) 在innerSubscribe (innerSubscribe.js:71) 在 SwitchMapSubscriber._innerSub (switchMap.js:44) 在 SwitchMapSubscriber._next (switchMap.js:34) 在 SwitchMapSubscriber.next (Subscriber.js:49) 在 CombineLatestSubscriber.notifyNext (combineLatest.js:73) 在 InnerSubscriber._next (InnerSubscriber.js:11) 在 InnerSubscriber.next (Subscriber.js:49) 在 BehaviorSubject._subscribe (BehaviorSubject.js:14) 在 BehaviorSubject._trySubscribe (Observable.js:42)
-
定义可观察对象和主题。
private openSortQuerySubject: BehaviorSubject<string> = new BehaviorSubject<string>(this.formatSortQuery(this.multiSortMeta)); public openSortQuery: Observable<string> = this.openSortQuerySubject.asObservable(); private closedSortQuerySubject: BehaviorSubject<string> = new BehaviorSubject<string>(this.formatSortQuery(this.multiSortMeta)); public closedSortQuery = this.closedSortQuerySubject.asObservable();
-
组合观察。
const openQueries$ = combineLatest([this.openFilterQuery,this.openSortQuery]); const closedQueries$ = combineLatest([this.closedFilterQuery,this.closedSortQuery]);
-
在服务方法中使用合并值。
openQueries$
.pipe(
switchMap(([filter,sort]) => {
this.alertService
.listAlerts(filter,sort);
}),tap(v => console.log(v))
)
.subscribe((openAlerts) => {
this.openAlertsCount = openAlerts.length;
this.openAlerts = this.parseAlerts(openAlerts);
});
closedQueries$
.pipe(
switchMap(([filter,sort);
})
)
.subscribe((closeDalerts) => {
this.closeDalertsCount = closeDalerts.length;
this.closeDalerts = this.parseAlerts(closeDalerts);
});
解决方法
您必须在 switchMap
回调中返回一个 observable(或 RxJS 知道如何将其转换为 observable 的东西)。
不是这个:
switchMap(([filter,sort]) => {
this.alertService.listAlerts(filter,sort);
})
但是这个(假设 listAlerts
返回一个 observable、promise 或类似的):
switchMap(([filter,sort]) => {
return this.alertService.listAlerts(filter,sort);
})
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。