结合 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)

  1. 定义可观察对象和主题。

     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();
    
  2. 组合观察。

       const openQueries$ = combineLatest([this.openFilterQuery,this.openSortQuery]);
       const closedQueries$ = combineLatest([this.closedFilterQuery,this.closedSortQuery]);
    
  3. 在服务方法中使用合并值。

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);
      });
cugdonjuan 回答:结合 combineLatest 和 switchMap 时未定义

您必须在 switchMap 回调中返回一个 observable(或 RxJS 知道如何将其转换为 observable 的东西)。

不是这个:

switchMap(([filter,sort]) => {
  this.alertService.listAlerts(filter,sort);
})

但是这个(假设 listAlerts 返回一个 observable、promise 或类似的):

switchMap(([filter,sort]) => {
  return this.alertService.listAlerts(filter,sort);
})
本文链接:https://www.f2er.com/390462.html

大家都在问