graphql - свойство корня или родителя резолвера равно нулю - PullRequest
0 голосов
/ 26 февраля 2019

Для данной схемы:

const typeDefs = gql`type Asset {
  id: ID!
  name: String!
  ScanProfiles: [ScanProfile]
}

type ScanProfile {
  id: ID!
  name: String!
  Assets: [Asset]
}

type Query {
  Asset(id: ID!): Asset
  ScanProfile(id: ID!): Asset
}`;

// Some generic resolvers...
const resolvers = {
  Asset: (root, args, context) => context.get('asset', args),
  ScanProfile: (root, args, context) => context.get('scanProfile, args),
  Query: {
    Asset: (root, args, context) => context.get('asset', args),
    ScanProfile: (root, args, context) => context.get('scanProfile', args)
  }
};

const schema = makeExecutableSchema({typeDefs, resolvers

const joinResolvers = {
  Asset: {
    ScanProfiles: (root, args, context) => { 
      console.log(root.ScanProfiles);
      return root.ScanProfiles.map(id => context.get('scanProfile', {id});
    }
  },
  ScanProfiles: {
    Assets: (root, args, context) => {
      console.log(root.id);
      return context.filter('asset', {ScanProfiles: ({ScanProfiles}) => ScanProfiles.includes(root.id)}); 
    }
  }
};

addResolveFunctionsToSchema({ schema, resolvers: joinResolvers });

Я ожидаю, что context.get для данного идентификатора вернет эти фигуры:

// Asset
{
  id: '1234',
  name: 'abcd',
  ScanProfiles: ['5678', '5679']
}
//ScanProfile
{
  id: '5678',
  name: 'efgh'
}

Консоль возвращает [null] для Asset.ScanProfiles.

Средство распознавания корня возвращает поля в виде массива строк, но когда корень затем передается в joinResolvers, эти файлы становятся пустыми.Я предполагаю, потому что они не соответствуют определенным typeDefs.

Чтобы обойти это, мне нужно сделать отдельный вызов, чтобы повторно получить родителя и затем извлечь сохраненные значения для ребенка.

Я неправильно определяю свой тип?Я неправильно структурирую свои резольверы?

1 Ответ

0 голосов
/ 27 февраля 2019

Проблема заключалась в определении типа.

Когда родительский объект разрешается, он ожидает, что дочерний элемент будет массивом Object, но то, что доставляется, является массивом строк.Таким образом, валидация типа возвращает массив нулей в соответствии с «пузырем», как определено в результате 1 here .

Существует открытое обсуждение на github, чтобы разрешить объединения скалярные типы .

...