Javascript 使用thunks的GraphQL循环引用-错误:字段类型必须是输出类型,但Get:未定义

Javascript 使用thunks的GraphQL循环引用-错误:字段类型必须是输出类型,但Get:未定义,javascript,graphql,relayjs,graphql-js,relay,Javascript,Graphql,Relayjs,Graphql Js,Relay,我必须解决GraphQL的循环定义,但由于某些原因,我无法解决。我查看了几篇关于thunks和延迟加载的帖子,下面是我当前的代码: History/types.js History/connections.js: User/types.js User/connections.js Company/types.js Company/connections.js 我不能让它工作。运行时,我得到以下输出: History.user field type must be Output Type but

我必须解决GraphQL的循环定义,但由于某些原因,我无法解决。我查看了几篇关于thunks和延迟加载的帖子,下面是我当前的代码:

History/types.js

History/connections.js:

User/types.js

User/connections.js

Company/types.js

Company/connections.js

我不能让它工作。运行时,我得到以下输出:

 History.user field type must be Output Type but got: undefined

我想你现在已经解决了,但是对于路过的人: 在history/types.js中,fields对象必须内联在HistoryType的fields函数中,因此它是在运行时创建的

const HistoryType = new GraphQLObjectType({
  ...
  fields: () => ({ ... }), // not a var, object is inlined
  ...
});
这可能会有帮助
const fields = {
    id: {
        type: new GraphQLNonNull(GraphQLID),
        resolve: (obj) => dbIdToNodeId(obj._id, "User")
    },
    email: {
        type: GraphQLString
    },
    history: {
        type: require('../History/connections').default,
        args: connectionArgs,
        resolve: (source, args, context) => {
            return HistoryModel.find({ deleted: false, objectId: source.id}).sort('timestamp').exec();
        }
    }
};

export const UserType = new GraphQLObjectType({
    name: 'User',
    description: 'User',
    interfaces: () => [NodeInterface],
    isTypeOf: (value) => value instanceof UserModel,
    fields: () => (fields)
});
import { UserType } from './types';

const { connectionType: UserConnectionType } = connectionDefinitions( { nodeType: UserType });

export default UserConnectionType;
const fields = {
    id: {
        type: new GraphQLNonNull(GraphQLID),
        resolve: (obj) => dbIdToNodeId(obj._id, "Company")
    },
    name: {
        type: GraphQLString
    },
    users: {
        type: require('../User/connections').default,
        args: connectionArgs,
        resolve: (source, args) => {
            const { id } = source;
            return UserModel.find({ companyId: id }).then((rows) => connectionFromArray(rows,args));
        }
    },
    history: {
        type: require('../History/connections').default,
        args: connectionArgs,
        resolve(source, args, context) {
            return loaders.getHistory(source.id);
        }
    }
};

export const CompanyType = new GraphQLObjectType({
    name: 'Company',
    description: 'Company',
    interfaces: () => [NodeInterface],
    isTypeOf: (value) => value instanceof CompanyModel,
    fields: () => (fields)
});
import { CompanyType } from './types';

const { connectionType: CompanyConnectionType } = connectionDefinitions( { nodeType: CompanyType });

export default CompanyConnectionType;
 History.user field type must be Output Type but got: undefined
const HistoryType = new GraphQLObjectType({
  ...
  fields: () => ({ ... }), // not a var, object is inlined
  ...
});