2016-07-06 5 views
1

배열 릴레이 연결에서 사용하는 가져 오기하는 방법 MongoDB를 (몽구스) :GraphQL, 릴레이 실제로이 잘 작동, 내가 몽구스와 배열 또는 객체를 가져올 수 없습니다

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); 
      }); 
     }); 
    } 
} 

이유는 User.find()가 Array 또는 Obj 대신 Promise를 반환하기 때문입니다. "User.find()"를 반환 배열이있는 다른 함수로 변경하면 동일한 함수가 제대로 작동합니다.

그래서 주된 질문 어떻게 Promise 대신 "Users.find()"를 사용하여 배열이나 개체를 얻을 수 있습니까? (, lean(), .exec())도 도움이되지 않습니다.

답변

1
npm i graphql-relay-connection --save 
const {connectionFromPromisedArray} = mongooseConnection; 

대신 connectionFromArray(get(), args)의 우리는 약속을 전달할 수 있습니다

connectionFromPromisedArray(collection.find(), args) 마지막으로 당신의 코드 톤없이 약속에서 배열을 가져올 수 있습니다.