为什么Apollo Query不返回缓存的对象而是原始数据?

时间:2018-07-13 11:12:18

标签: angular apollo

我认为我不正确理解Apollo InMemoryCache的概念。由于缓存为唯一的Id对象保留一个对象,因此我希望从返回该唯一对象的每个查询调用中都返回相同的实际对象。显然不是这样,因为它会根据我的要求提供原始数据。

如果不是这种情况,使用唯一对象的最佳实践是什么

示例来说明我的问题(简化):

查询1

this.apollo.query({
  query: gql`
    query {
      currentUser {

        id,
        firstName

      }
    }
  `
})
.subscribe(result: ApolloQueryResult<Query>) => {
  someService.currentUser = result.data.currentUser;
})

查询2

this.apollo.query({
  query: gql`
    query {
      books {

        id,
        title,

        author {
          id,
          lastName
        }

      }
    }
  `
})
.subscribe(result: ApolloQueryResult<Query>) => {
  someService.books = result.data.books;
})

比较用户:

someService.books[0].author.id === someService.currentUser.id  // returns true
someService.books[0].author === someService.currentUser  // returns false --> expected to be true

现在对我来说有趣的是,我确实在缓存中找到了一个唯一的条目User:123,它具有firstName和lastName。因此,缓存本身可以按预期工作,但是我希望在执行查询时也能获得该唯一对象。

如何正确使用缓存?

0 个答案:

没有答案