我获取了一个用户列表
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
回调?当我一般性地更新缓存时还是从缓存中更新某个对象(在我的情况下,是用户列表)?