Javascript GraphQL流媒体类型?

Javascript GraphQL流媒体类型?,javascript,streaming,graphql,graphql-js,Javascript,Streaming,Graphql,Graphql Js,我现在正在玩,把它连接到一个MariaDB后端 我已经知道如何返回整个结果集: const queryType = new GraphQLObjectType({ name: 'Query', fields: () => ({ users: { type: new GraphQLList(userType), resolve: (root, args) => new Promise((resolve, r

我现在正在玩,把它连接到一个MariaDB后端

我已经知道如何返回整个结果集:

const queryType = new GraphQLObjectType({
    name: 'Query',
    fields: () => ({
        users: {
            type: new GraphQLList(userType),
            resolve: (root, args) => new Promise((resolve, reject) => {
                db.query('select * from users', (err, rows, fields) => {
                    if(err) return reject(err);
                    resolve(rows);
                });
            }),
        }
    })
});
这很酷,但也让我,一排一排

GraphQL是否有助于实现这一点

据我所知,
graphqlist
需要一个完整的数组,我只能解析我的结果集一次,不能使用发射器或其他东西馈送。

(这不是一个完整的答案,但也不适合作为注释)

根据graphQL规范,应可能:

GraphQL提供了许多内置标量,但是类型系统可以 添加具有语义的附加标量。例如,GraphQL 系统可以定义一个称为时间的标量,该标量在序列化为 字符串,承诺符合ISO-8601。查询类型为的字段时 随着时间的推移,您可以依靠使用 ISO-8601解析器,并使用特定于客户端的原语进行时间分析。另一个 一个潜在有用的自定义标量的示例是Url,它序列化 作为字符串,但由服务器保证为有效URL

因此,结构应如下所示:

var myStream = new GraphQLScalarType({
    name: "myStream",
    serialize: ...
    parseValue: ...
    parseLiteral: ...
  });
}
现在我想您可以尝试返回承诺/流,看看会发生什么,但我认为它还不受支持。很多人都在问这个问题,我想我看到了graphQL团队中有人的评论,说他们正在研究这个问题(不幸的是找不到它)


个人观点,但如果不将该行为纳入graphQL的核心就无法改变,则可能表明graphQL目前的情况并没有那么灵活。

基本graphQL服务器不可能流式处理结果,因为它有一个客户机-服务器体系结构(您发送HTTP请求并返回HTTP响应)


不过,订阅也是可能的。它们是GraphQL(请参阅)。

请参阅GraphQL@stream指令,例如

我想当我写这篇文章时,我想
解析
以允许生成器返回类型或其他流。在生成器/流耗尽/关闭之前,不会发送HTTP响应。我将查看您发布的这些链接。流式响应会更酷,但可能更难处理。如果您可以等待响应,直到收集完所有数据,只需继续返回承诺,并仅在到达流末尾时收集值并返回数组。