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

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

    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,

[так далее]

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

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

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

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

0 ответов

Другие вопросы по тегам