2017-09-20 2 views
0

Ich habe mehrere Benutzerknoten (ca. 45 Benutzer) und ich möchte die Gesamtzahl der Benutzer sowie die Benutzerdetails auch in einer einzigen Abfrage zurückgeben. (Ähnlich wie bei How to design the following resolver for GraphQL server?)Wie Promise.all in Graphql Resolver für Neo4j zu verwenden?

Mein Schema:

type User { 
    ID: Int 
    name: String 
} 

type Query { 
    users: [User] 
} 

und nach dem Resolver für Benutzer ausgeführte Abfrage, ich mag, wie der Anwender als auch die Gesamtzahl ziehen Details zu wie unten:

{ 
     "data": { 
     "users": { 
      "total": 45 
      "users": [ 
      { 
       "ID": 1, 
       "name": "User A" 
      }, 
      { 
       "ID": 2, 
       "name": "User B" 
      }, 
      ... 
      ] 
     } 

Aber ich bin verwirrt, wie man Promise.all in neo4j verwendet. Ich habe versucht zu sehen, wie das Versprechen in neo4j funktioniert, aber ich habe keine gewünschten Informationen gefunden. Könnten Sie mir bitte mitteilen, wie ich meinen Resolver für diesen Fall schreiben soll? Jede Hilfe wäre spürbar !!

Antwort

0

Die Verwendung von Promise.all ist in neo4j nicht anders. Promise.all kommt von javascript. Um Resolver zu schreiben Sie können Sie wie folgt:

let countQuery = "MATCH(n:User) RETURN count(n) as count;"; 
let userQuery = "MATCH(u:User) RETURN u;"; 
return Promise.all([ 
    dbSession().run(countQuery, params), 
    dbSession().run(userQuery, params) 
]).then((data) => { 
    return { 
    total: data[0].records.map(record => {return record.get('count')} 
    users: data[1].records.map(record => {return record.get('u')} 
    } 
}) 

In Ihrem Schema Typ können Sie es ändern zu folgenden:

type User { 
    ID: Int 
    name: String 
} 
type PagedData { 
    total: Int, 
    users: [User] 
} 
type Query { 
    users: PagedData 
} 
+0

Danke, das ist das, was ich erwartet hatte :) –

Verwandte Themen