【问题标题】:How to use Promise.all in graphql resolver for neo4j?如何在 neo4j 的 graphql 解析器中使用 Promise.all?
【发布时间】:2018-03-01 23:41:54
【问题描述】:

我有多个用户节点(大约 45 个用户),我想在单个查询中返回用户总数以及用户的详细信息。 (类似于How to design the following resolver for GraphQL server?

我的架构:

type User {
    ID: Int
    name: String
}

type Query {
  users: [User]
}

在为 users 查询运行解析器之后,我想提取总计数以及用户详细信息,如下所示:

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

但是我很困惑如何在 neo4j 中使用 Promise.all。我试图查看诺言在 neo4j 中是如何工作的,但我没有找到任何想要的信息。 那么,您能否让我知道我应该如何为这种情况编写解析器?任何帮助都将是可观的!!

【问题讨论】:

    标签: neo4j apollo-server


    【解决方案1】:

    在 neo4j 中使用 Promise.all 并没有什么不同。 Promise.all 来自 javascript。要编写解析器,您可以执行以下操作:

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

    在您的架构类型中,您可以将其更改为以下内容:

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

    【讨论】:

    • 谢谢,这是我所期待的 :)
    猜你喜欢
    • 2020-10-01
    • 2017-10-03
    • 2021-09-10
    • 2021-07-29
    • 2018-03-26
    • 2020-05-22
    • 2018-09-30
    • 1970-01-01
    • 2021-10-19
    相关资源
    最近更新 更多