Когда вызывается обратный вызов watchQuery (). ValueChanges?(Ошибка превышения максимального размера стека вызовов) - PullRequest
0 голосов
/ 23 мая 2019

Я получаю список пользователей

    this.apollo.watchQuery<any>({ query: this.getAllQuery })
        .valueChanges.subscribe(users => this.users = users);

, затем список где-то отображается.Когда я нажимаю на пользователя, я вижу больше информации об этом пользователе.Поэтому я делаю следующее

this.apollo.query<any>({query: this.getUserQuery, variables: {id}})
    .subscribe(selectedUser => this.selectedUser = selectedUser)

Первый раз, когда я щелкаю пользователя, все работает нормально, но во второй раз, когда я выбираю пользователя, я получаю следующее сообщение

ApolloError {originalStack:«Ошибка» в ApolloError.ZoneAwareError ...

graphQLErrors: []

сообщение: «Ошибка сети: максимальный размер стека вызовов

networkError: RangeError: Максимальный размер стека вызововПревышено в Object.hasOwnProperty () Превышено "...

стек:" Ошибка "в ApolloError.ZoneAwareError (http://localhost:4200/vendor.js:223157:33)↵ в новом ApolloError (http://localhost:4200/vendor.js:148466:28)↵ в QueryManager.

[etc]

Я прочитал в документах и обнаружил следующее:

Как вы знаете, метод Apollo.query возвращаетНаблюдаемый, который выдает результат, только один раз. Apollo.watchQuery также делает то же самое, за исключением того, что он может выдавать несколько результатов. (Сам запрос GraphQL все еще отправляется только один раз, но наблюдаемая watchQuery также может обновляться, если, например, другой запрос вызывает объект будет обновлено в глобальном кэше Клиента Apollo.)

Я не могу понять, почему при выборе пользователя вызывается users => this.users = users.Он должен вызываться только когда я обновляю список пользователей (когда я добавляю, редактирую или удаляю его из списка).

Итак, когда именно watchQuery().valueChanges вызывается обратный вызов?Когда я обновляю кеш вообще или когда я обновляю определенный объект (в моем случае, список пользователей) из кеша?

...