2017-09-20 2 views
0

J'ai plusieurs noeuds utilisateur (environ 45 utilisateurs) et je veux retourner le nombre total d'utilisateurs ainsi que les détails de l'utilisateur aussi dans une seule requête. (Similaire à How to design the following resolver for GraphQL server?)Comment utiliser Promise.all dans le résolveur graphql pour neo4j?

Mon schéma:

type User { 
    ID: Int 
    name: String 
} 

type Query { 
    users: [User] 
} 

Et après l'exécution du résolveur pour utilisateurs requête, je veux tirer le nombre total, ainsi que les utilisateurs détails trop comme ci-dessous:

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

Mais je suis confus comment utiliser Promise.all dans neo4j. J'ai essayé de voir comment la promesse fonctionne dans neo4j mais je n'ai trouvé aucune information désirée. Alors, pourriez-vous s'il vous plaît laissez-moi savoir comment dois-je écrire mon résolveur pour ce cas? Toute aide serait appréciable !! L'utilisation de Promise.all n'est pas différente dans neo4j.

Répondre

0

Promise.all vient de javascript. Pour écrire résolveur vous pouvez faire ce qui suit:

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

Dans votre type de schéma que vous pouvez le remplacer par ce qui suit:

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

Merci, voilà ce que je me attendais :) –