Graphql 中继:如何在利用NodeDefinition的同时避免重复的DB查询

Graphql 中继:如何在利用NodeDefinition的同时避免重复的DB查询,graphql,relayjs,graphql-js,Graphql,Relayjs,Graphql Js,我的问题是关于在分页时要求用户。以继电器启动器套件为基本示例 class User {} class Widget {} // Mock data var viewer = new User(); viewer.id = '1'; getUser: (id) => id === viewer.id ? viewer : null, getViewer: () => viewer, 如果这是一个真正的数据库,viewer将是对数据库的请求。让我们称之为fetchUser(id

我的问题是关于在分页时要求用户。以继电器启动器套件为基本示例

class User {}
class Widget {}

// Mock data
var viewer = new User();
viewer.id = '1';  

getUser: (id) => id === viewer.id ? viewer : null,
getViewer: () => viewer,
如果这是一个真正的数据库,
viewer
将是对数据库的请求。让我们称之为
fetchUser(id)

每次我们从'User'上的
nodededefinitions
发出请求时,我们调用
getUser()
,它向数据库发出请求,请求
fetchUser(id)

当我们通过调用widgets(第一个:$count),例如,通过将
$count
增加3,在“User”示例上通过一个长的无限滚动的widgets对一个片段进行分页时,我们会重复为每个分页向数据库发出请求
fetchUser(id)
。这是通过每次对同一数据段发出请求来阻止数据分页

我知道data loader,但是有没有一种更简单的方法来缓存这个请求,而不必进行db查询

var userType = new GraphQLObjectType({
  name: 'User',
  description: 'A person who uses our app',
  fields: () => ({
    id: globalIdField('User'),
    widgets: {
      type: widgetConnection,
      description: 'A person\'s collection of widgets',
      args: connectionArgs,
      resolve: (_, args) => connectionFromArray(getWidgets(), args),
    },
  }),
var userType = new GraphQLObjectType({
  name: 'User',
  description: 'A person who uses our app',
  fields: () => ({
    id: globalIdField('User'),
    widgets: {
      type: widgetConnection,
      description: 'A person\'s collection of widgets',
      args: connectionArgs,
      resolve: (_, args) => connectionFromArray(getWidgets(), args),
    },
  }),