Graphql создает отношения между двумя запросами. Ошибка не может получить доступ до инициализации - PullRequest
0 голосов
/ 09 февраля 2020

У меня есть этот код:

const ProductType = new GraphQLObjectType({
    name: 'Product',
    fields: {
        id: { type: GraphQLID },
        name: { type: GraphQLString },
        category: {
            type: CategoryType,
            resolve: async (parent) => {
                return await Category.findOne({_id: parent.category});
            }
        }
    }
});

const CategoryType = new GraphQLObjectType({
    name: 'Category',
    fields: {
        id: { type: GraphQLID },
        name: { type: GraphQLString },
        products: {
            type: ProductType,
            resolve: async (parent, args) => {
                return await Product.find({category: parent._id});
            }
        }
    }
});

const Query = new GraphQLObjectType({
    name: 'Query',
    fields: {
        Categories: {
            type: new GraphQLList(CategoryType),
            resolve: async () => {
                return await Category.find();
            }
        }
    }
});

Когда я пытаюсь скомпилировать, я получаю ReferenceError: Невозможно получить доступ к CategoryType до инициализации. Я понимаю, что в первую очередь я должен объявить и только после этого использования, но я видел похожий код в одном уроке на YouTube, и я думаю, что он должен работать, но это не так.

1 Ответ

0 голосов
/ 09 февраля 2020

fields может принимать функцию вместо объекта. Таким образом, код внутри функции не будет оцениваться сразу:

fields: () => ({
  id: { type: GraphQLID },
  name: { type: GraphQLString },
  category: {
    type: CategoryType,
    resolve: (parent) => Category.findOne({_id: parent.category}),
  }
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...