Javascript GraphQL流媒体类型?
我现在正在玩,把它连接到一个MariaDB后端 我已经知道如何返回整个结果集: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
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响应。我将查看您发布的这些链接。流式响应会更酷,但可能更难处理。如果您可以等待响应,直到收集完所有数据,只需继续返回承诺,并仅在到达流末尾时收集值并返回数组。