合并 combineLatest 和 switchMap 时未定义
undefined when combine combineLatest and switchMap
我正在尝试将两个 Observable 组合在一起,以便为调用接受两个值的服务方法提供很少的值。但是这里我几乎没有错误
'([filter, sort]: [string, string]) => void' 类型的参数不可分配给 '(value: [string, string], index:数字)=> ObservableInput'。
类型 'void' 不可分配给类型 'ObservableInput'.
在控制台中 -
您提供了 'undefined' 预期流的位置。您可以提供 Observable、Promise、Array 或 Iterable。
在 subscribeTo (subscribeTo.js:27)
在内部订阅 (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(内部Subscriber.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]) => {
this.alertService
.listAlerts(filter, sort);
})
)
.subscribe((closedAlerts) => {
this.closedAlertsCount = closedAlerts.length;
this.closedAlerts = this.parseAlerts(closedAlerts);
});
你必须在 switchMap
回调中 return 一个 observable(或者 RxJS 知道如何变成一个 observable 的东西)。
不是这个:
switchMap(([filter, sort]) => {
this.alertService.listAlerts(filter, sort);
})
但是这个(假设 listAlerts
return 是一个可观察的、一个承诺或类似的):
switchMap(([filter, sort]) => {
return this.alertService.listAlerts(filter, sort);
})
我正在尝试将两个 Observable 组合在一起,以便为调用接受两个值的服务方法提供很少的值。但是这里我几乎没有错误
'([filter, sort]: [string, string]) => void' 类型的参数不可分配给 '(value: [string, string], index:数字)=> ObservableInput'。 类型 'void' 不可分配给类型 'ObservableInput'.
在控制台中 -
您提供了 'undefined' 预期流的位置。您可以提供 Observable、Promise、Array 或 Iterable。 在 subscribeTo (subscribeTo.js:27) 在内部订阅 (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(内部Subscriber.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]) => {
this.alertService
.listAlerts(filter, sort);
})
)
.subscribe((closedAlerts) => {
this.closedAlertsCount = closedAlerts.length;
this.closedAlerts = this.parseAlerts(closedAlerts);
});
你必须在 switchMap
回调中 return 一个 observable(或者 RxJS 知道如何变成一个 observable 的东西)。
不是这个:
switchMap(([filter, sort]) => {
this.alertService.listAlerts(filter, sort);
})
但是这个(假设 listAlerts
return 是一个可观察的、一个承诺或类似的):
switchMap(([filter, sort]) => {
return this.alertService.listAlerts(filter, sort);
})