2

Service.ts ファイル

バージョン 5 コード:

return this.connectionListStoreService.connections$.pipe(
  combineLatest(this.isLoadPending$),
  filter(([connections, isPending]) => !isPending),
  map(([connections]) => connections),
  combineLatest(
    this.adapterStoreService.adapters$,
    this.applicationsStoreService.applications$
  ),
  map(([connections, adapters, applications]) => {
    if (!connections || !adapters || !applications) {
      return;
    }

    return connections
      .filter(connection => connection.source && connection.destination)
      .map((connection) => ({
        ...connection,
        source: {
          ...connection.source,
          adapter: adapters.find((item) => item.id === connection.source.appTypeId),
          application: applications.find((item) => item.id === connection.source.applicationId)
        },
        destination: {
          ...connection.destination,
          adapter: adapters.find((item) => item.id === connection.destination.appTypeId),
          application: applications.find((item) => item.id === connection.destination.applicationId)
        }
      }))
      .filter(({ source, destination }) =>
        source.application && source.adapter && destination.application && destination.adapter);
  })
);

バージョン 6 コード:

return combineLatest([this.connectionListStoreService.connections$, this.isLoadPending$]).pipe(
  filter(([connections, isPending]) => !isPending),
  map(([connections]) => connections),
  combineLatest([this.adapterStoreService.adapters$, this.applicationsStoreService.applications$]),
  map(([connections, adapters, applications]) => {
    if (!connections || !adapters || !applications) {
      return;
    }

    return connections
      .filter(connection => connection.source && connection.destination)
      .map((connection) => ({
        ...connection,
        source: {
          ...connection.source,
          adapter: adapters.find((item) => item.id === connection.source.appTypeId),
          application: applications.find((item) => item.id === connection.source.applicationId)
        },
        destination: {
          ...connection.destination,
          adapter: adapters.find((item) => item.id === connection.destination.appTypeId),
          application: applications.find((item) => item.id === connection.destination.applicationId)
        }
      }))
      .filter(({ source, destination }) =>
        source.application && source.adapter && destination.application && destination.adapter);
  })
)

この古いコードをオンライン ガイドラインの新しいコードに変更しました。combineLatestこの関数にネストされた問題に直面しています:

エラー:

@deprecated — resultSelector はサポートされなくなりました。代わりにパイプでマップします

タイプ 'Observable<[AdapterModel[], ApplicationModel[]]>' の引数は、タイプ 'OperatorFunction<unknown, unknown>' のパラメーターに割り当てられません。

タイプ 'Observable<[AdapterModel[], ApplicationModel[]]>' は署名 '(source: Observable): Observable'.ts(2345) に一致しません

RXJSのバージョン:「6.6.3」、

私の側から必要な追加情報があるかどうかお知らせください。前もって感謝します。

4

2 に答える 2

1

正しいものをインポートしていますcombineLatestか? rxjsから 1 つをインポートし、別のものを からインポートする必要がありますrxjs/operators

import { combineLatest as combineLatestWith } from 'rxjs';
import { combineLatest } from 'rxjs/operators';

...

combineLatestWith([...]).pipe(
  ...
  combineLatest([...]),
)

私は知っています、それはかなり混乱しており、 RxJS 7 で再び変更されようとしています。

masterところで、何らかの理由でリポジトリのブランチから削除された公式の移行ドキュメントがここにありました: https://github.com/ReactiveX/rxjs/blob/6.x/docs_app/content/guide/v6/migration.md

于 2020-11-13T13:53:49.310 に答える