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 без тонны кода.