Получение неверных данных с помощью Apollo - PullRequest
0 голосов
/ 05 мая 2020

Я пытаюсь получить данные с помощью Apollo. Вот простой запрос:

export const CurrentUserForProfile = gql`

    query getGroupDetails($groupId: Long, $groupType: String, $tags: [Tag]) {
        nodes: NodesRelay (
          first: 50
          where: {
            tags: { CONTAINS: $tags },
            OR: {
              AND: {
                nsParentId: { EQ: $groupId }
                nsParentType: { EQ: $groupType }
              }
              superGroupNodeLinks: {
                groupId: { EQ: $groupId }
                groupType: { EQ: $groupType }
              }
            }
          }
        ) {
          elements {
            data {
              ...nodeFields
              ext {
                ...nodeExtFields
              }
            }
          }
          pageInfo {
            ...pageInfoFields
          }
        }
      }

      fragment nodeFields on Node {
        id {
          id
          type
        }
        subtype
        internalId
        businessId
        scadaId
        isGroup
        isTemporary
        nsParentId
        nsParentType
        ouId
        description
        shortDescription
        status
        isNsPowered
        tags
        owners
        notes
        version
      }

      fragment nodeExtFields on NodeExt {
        id {
          id
          type
        }
        asParentId
        asParentType
        isAsPowered
        isAsInconsistent
        isAsPoweredInParallel
        isAsPoweredByExtSource
        isAsPoweredByDiffSource
        maneuverId
        entityStatusMap
        createdAt
        createdBy
        updatedAt
        updatedBy
        version
      }

      fragment pageInfoFields on PageInfo {
        hasNextPage
        hasPreviousPage
        startCursor
        endCursor
      }
    `;

, и я использую его, как сказано в учебнике:

this.data = this.apollo
            .watchQuery({
                query: CurrentUserForProfile,
                variables: {
                    "groupId": 15,
                    "groupType": "sec_subst",
                    "tags": ["GIS"]
                },
                fetchResults: true,
                returnPartialData: false,
            }).valueChanges
            .pipe(
                map((res: any) => res.data.nodes.elements)
            )

the HTML:

<ng-container *ngFor="let a of data | async">
    {{a.data.id.type}} <br>
  </ng-container>

Я получаю всего 10 строк "lv_line". Если я изменю logi c, подпишусь на компонент и сделаю console.log(data), я увижу то же самое. Это могло быть правильно, но это не так. Данные, которые я получаю, совершенно неверны, и если я проверю вкладку сети, независимо от того, какой logi c в моем приложении, данные верны, а не просто массив из 10 элементов со свойством type всегда "lv_line".

Вот результат сети:

enter image description here

, а результат HTML выглядит так:

enter image description here

Что я делаю не так? Я пробовал все, что мог придумать, безуспешно, получая тот же неправильный результат, попытка за попыткой.

1 Ответ

0 голосов
/ 06 мая 2020

В нерабочее время мне удалось решить проблему. Просто используя no-cache fetchPolicy, все проблемы исчезнут.

this.data = this.apollo
            .watchQuery({
                query: CurrentUserForProfile,
                variables: {
                    "groupId": 15,
                    "groupType": "sec_subst",
                    "tags": ["GIS"]
                },
                fetchResults: true,
                returnPartialData: false,
                fetchPolicy: "no-cache" // <-------
            }).valueChanges
            .pipe(
                map((res: any) => res.data.nodes.elements)
            )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...