GraphQL, Relay и Mongodb (mongoose) как получить массив

Я не могу получить массив или объект с помощью mongoose, чтобы использовать его в соединении Relay, на самом деле это работает нормально:

let queryType = new GraphQLObjectType({
    name: 'Query',
    fields: () => ({
        getUsers: {
            type: new GraphQLList(userType),
            resolve: (_, args) => {
                return new Promise((resolve, reject) => {
                    Users.find(args, (err, users) => {
                        err ? reject(err) : resolve(users);
                    });
                });
            }
        }
    })
});

в GraphiQL я могу получить массив. Но когда я пытаюсь использовать ту же функцию "разрешения" с Relay, она не работает!

getUsers: {
    node: nodeField,
    type: usersType,
    resolve: (_, args) => {
        return new Promise((resolve, reject) => {
            Users.find(args, (err, users) => {
                err ? reject(err) : resolve(users);
            });
        });
    }
}

и я думаю, что причина в том, что Users.find() возвращает Promise вместо Array или Obj. Та же функция, если я просто изменяю "Users.find()" на любую другую функцию с возвращаемым массивом, работает нормально.

Итак, основной вопрос, как я могу получить массив или объект с "Users.find()" вместо Promise? (, lean (),.exec()) тоже не помогает.

1 ответ

Решение
npm i graphql-relay-connection --save
const {connectionFromPromisedArray} = mongooseConnection;

и вместо connectionFromArray(get(), args) мы можем передать обещание: connectionFromPromisedArray(collection.find(), args)

Наконец, вы можете получить массив из Promise без тонны кода.

Другие вопросы по тегам