GraphQL streaming type?
GraphQL streaming type?
我现在正在玩GraphQL-JS,将其连接到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有什么可以促进这一点吗?
据我所知,GraphQLList
期待一个完整的数组,我只能一次解决我的结果集,而不是使用发射器或其他东西。
(这不是一个真正完整的答案,但也不适合注释)
根据graphQL规范,应该可以:
GraphQL提供了许多内建的标量,但是类型的系统可以添加具有语义意义的额外标量。例如,GraphQL系统可以定义一个名为Time的标量,它被序列化为字符串,承诺符合ISO‐8601。查询类型为之后,您就可以依赖于解析结果的能力ISO - 8601解析器和使用客户端特定的原语的时间。另一个一个可能有用的自定义标量的例子是Url,它序列化作为字符串,但由服务器保证是一个有效的URL。
结构应该是这样的:
var myStream = new GraphQLScalarType({
name: "myStream",
serialize: ...
parseValue: ...
parseLiteral: ...
});
}
现在我猜你可以尝试返回承诺/流,看看会发生什么,但我认为它还不支持。很多人都在问这个问题,我想我看到了graphQL团队中有人的评论,说他们正在调查这个问题(不幸的是找不到它)。
这是我个人的意见,但是如果不将这种行为合并到graphQL的核心中就不能改变它,这可能表明graphQL现在并不是那么灵活
基本GraphQL服务器不可能流结果,因为它有一个客户端-服务器架构(您发送HTTP请求并获得HTTP响应)。
但是订阅是可能的。它们最近被添加到GraphQL中(参见后面的故事)。
参见GraphQL @stream指令,示例https://github.com/rmosolgo/graphql-ruby-stream-defer-demo
- 如何将输入(type=text)从html表单传递到javascript函数
- 正在将base64 jpeg从input-type=file上传到服务器
- 类型错误'未定义'不是对象(正在评估'navigator.connection.type'
- <输入id=“;“到期”;type=“;月份;min=“;2016-05”>如何填写“;min”;属性与当前
- angular type=[number]指令来阻止粘贴
- 节点,express应用程序返回text/javascript响应头(Content-Type),尽管设置了applic
- 未捕获错误:语法错误,无法识别的表达式:input[@type=submit]
- 如何停止向上滚动<按钮dojoType=“;dijit.form.Button”;type=“;提交”/>在
- type=text/javascript和language=javascript之间的区别
- jQuery$.post TypeError:e.type不是函数
- X-Content-Type-Options=nosniff解决方法
- 为什么Angularjs验证don't与输入[type=“number”]一起工作
- 如何将按钮的数据属性设置为输入[type=text]中设置的任何值
- 有没有什么方法可以通过输入字段(type=file)来找出选择了多少个文件
- 使用图像而不是文本(script type=“text/javascript”)
- 无法在“(”input:checkbox [name=type]:checked“).each(function())”
- What type is the 'return' keyword?
- Type=文本模式问题
- lightgallery type未加载错误图像
- GraphQL streaming type?