当watchQuery()。valueChanges回调被触发时? (最大调用堆栈大小超出错误)

时间:2019-05-23 13:27:06

标签: angular graphql apollo apollo-client apollo-angular

我获取了一个用户列表

    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]

我读了docs,发现以下内容:

  

如您所知,Apollo.query方法返回一个Observable,它发出一个   结果,只有一次。 Apollo.watchQuery也一样,除了它可以   发出多个结果。 (GraphQL查询本身仍然只发送   一次,但是watchQuery observable也可以更新,例如,   另一个查询导致对象在Apollo Client的   全局缓存。)

我不明白为什么选择用户时会调用users => this.users = users。应该在我更新用户列表时(当我在列表中添加,编辑或删除它时)调用它。

那么,何时恰好触发watchQuery().valueChanges回调?当我一般性地更新缓存时还是从缓存中更新某个对象(在我的情况下,是用户列表)?

0 个答案:

没有答案