2016-07-06 9 views
1

ich nicht Array oder ein Objekt mit Mungo es in Relay-Verbindung zu verwenden holen kann, tatsächlich das funktioniert gut:GraphQL, Relais und MongoDB (Mungo), wie Array holen

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

in GraphiQL i Array erhalten kann . Aber wenn ich versuche, die gleiche "Auflösungs" -Funktion mit Relay zu verwenden, funktioniert es nicht!

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

und ich denke, Grund ist, weil Users.find() geben Versprechen statt Array oder Obj. Gleiche Funktion, wenn ich nur "Users.find()" zu einer anderen Funktion mit Return-Array ändert, funktioniert gut.

Also Hauptfrage, wie bekomme ich Array oder Objekt mit "Users.find()" statt Versprechen? (, mager(), .exec()) hilft auch nicht.

Antwort

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

und statt connectionFromArray(get(), args) können wir versprechen passieren: connectionFromPromisedArray(collection.find(), args)

Schließlich Sie Array von Promise ohne Tonnen von Code abrufen kann.