- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我可能面临 Apollo GraphQL server 的设计限制我想问一下是否有解决方法。
我的架构包含类型 Thing
,具有字段 flag
.我希望能够过滤 things
通过 flag
的值,但如果单独解析该字段似乎是不可能的。如果我想排序 things
也会出现同样的问题.这是一个例子:
type Thing {
id: String!
flag Boolean!
}
type Query {
things(onlyWhereFlagIsTrue: Boolean): [Thing!]!
}
const resolvers = {
Thing: {
flag: async ({id}) => {
const value = await getFlagForThing(id);
return value;
}
},
Query: {
async things(obj, {onlyWhereFlagIsTrue = false}) {
let result = await getThingsWithoutFlags();
if (onlyWhereFlagIsTrue) {
// ↓ this does not work, because flag is still undefined
result = _.filter(result, ['flag', true]);
}
return result;
}
}
}
things
在所有异步字段都解决之后?我知道我可以调用
getFlagForThing(id)
里面
things
解析器,但这不是重复我自己吗?解析
flag
背后的逻辑可能比仅调用一个函数要复杂一些。
const resolvers = {
Thing: {
flag: async ({id, flag}) => {
// need to check if flag has already been resolved
// to avoid calling getThingsWithoutFlags() twice
if (!_.isUndefined(flag)) {
return flag;
}
const value = await getFlagForThing(id);
return value;
}
},
Query: {
async things(obj, {onlyWhereFlagIsTrue = false}) {
let result = await getThingsWithoutFlags();
if (onlyWhereFlagIsTrue) {
// asynchroniously resolving flags when needed
const promises = _.map(result, ({id}) =>
getFlagForThing(id)
);
const flags = await Promise.all(promises);
for (let i = 0; i < flags.length; i += 1) {
result[i].flag = flags[i];
}
// ↓ this line works now
result = _.filter(result, ['flag', true]);
}
return result;
}
},
};
最佳答案
我认为这里的问题实际上并不是 Apollo 服务器的限制,而更多地与您有一个带有解析器的原始字段这一事实有关。通常,最好仅在该字段将返回单独的类型时才对字段使用解析器:
Thing {
id: ID!
flag: Boolean!
otherThings: OtherThing
}
Query {
things(onlyWhereFlag: Boolean): [Thing!]!
}
otherThings
设置单独的解析器。 ,但是如果一个字段是一个原始字段,那么我只会将该字段与 Thing 一起解析。
const filterByKeyValuePair = ([key, value]) => obj => obj[key] === value;
const resolvers = {
Query: {
async things(parent, { onlyWhereFlag }) {
const things = await Promise.all(
(await getThings()).map(
thing =>
new Promise(async resolve =>
resolve({
...thing,
flag: await getFlagForThing(thing)
})
)
)
);
if (onlyWhereFlag) {
return things.filter(filterByKeyValuePair(['flag', true]));
} else {
return things;
}
}
}
};
flag
不是原始人吗?好吧,如果您想按它进行过滤,那么您将有几个不同的选择。这些选项实际上取决于您获取“标志”数据的方式。如果您可以提供有关您的架构和数据模型的更多详细信息,我将很乐意详细说明。
关于graphql - Apollo GraphQL 服务器 : filter (or sort) by a field that is resolved separately,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46619596/
我在玩一些代码挑战时发现自定义排序(排序接口(interface)的实现)比仅针对 slice 的原始结构要快得多。这是为什么?将 slice 转换为类型是否会产生一些魔力(例如转换为指向结构的指针
我正在使用 simple-import-sort eslint 插件进行 react 。我想我的 .eslintrc.js是对的,但我无法使这个特定的插件工作。我在文件的第一行收到以下错误: 未找到规
Closed. This question is not reproducible or was caused by typos。它当前不接受答案。 想改善这个问题吗?更新问题,以便将其作为on-to
好的,所以我是 Go 的新手,我正在努力让自己熟悉按函数排序。我可能误解了什么,所以如果我错了请纠正我。 我正在尝试创建一个包含字段 key 和 value 的 Nodes 数组。我想创建一个自定义排
我想从惰性列表中取出 n 个最大的元素。 我听说在 Data.List.sort 中实现的合并排序是惰性的,它不会产生不必要的元素。就比较而言,这可能是正确的,但在内存使用方面肯定不是这样。下面的程序
这个问题已经有答案了: Javascript sort function. Sort by First then by Second (10 个回答) 已关闭 3 年前。 我正在尝试返回已排序产品的列
我有一个 vector 对,如下所示。第一对值未排序,第二对值已排序(从零开始)。我可能想通过实现 std::vector 和 std::pair 来存储数据。当我有第一对值(未排序)时,找到相应的第
直到现在(Swift 2.2)我一直愉快地使用来自 this answer 的代码- 它迅速,优雅,它像梦一样工作。 extension MutableCollectionType where Ind
我在我的 Go 应用程序中实现排序界面时遇到问题。这是相关代码: type Group struct { Teams []*Team } type Team struct { Point
我很好奇 Lua 的默认算法是什么 table.sort使用,只是因为它比我遇到的其他一些排序算法慢。我也很好奇 Lua 的 table.sort是在引擎中用 C 编写的,或者如果它在 Lua 中的库
例如,插入排序被描述为部分排序数组的有效算法。但如何精确定义“部分排序”呢? 最佳答案 这是一个只有少数元素不合适的数组。如果没有指定百分比或其他阈值,则部分排序和未排序之间没有严格的区别。 正式定义
我是 GPU 编程的新手。最近,我正在尝试根据一个教程实现gpu bvh构建算法:http://devblogs.nvidia.com/parallelforall/thinking-parallel
有人可以指导我 Gnumeric 排序函数的详细说明(链接)吗? Gnumeric 手册很简短并且没有示例。我无法通过搜索引擎找到任何合适的信息,甚至 Stackoverflow 上也只有六个不合适的
在 Python 中使用什么精确规则来对列表进行排序,其中元素是列表?这可以表示为“key”或“cmp”吗功能?问题来自于有两件事考虑:长度和它们位置的值。 sorted([ [ 0, 1, 2
下面的代码应该创建一个整数数组 (a) 并对它进行排序,但是 sort.Sort 似乎没有修改变量。 package main import ( "fmt" "sort" ) type
我有一个应用于结构的自定义排序函数。完整代码是 here on play.golang.org . type Stmt struct { Name string After []st
python3 sorted取消了对cmp的支持。 python3 帮助文档: ?
以下是来自普林斯顿的 coursera 算法类(class)的练习。 如果一个数组既是 3 次排序又是 5 次排序,那么它是否也是 6 次、7 次、8 次、9 次和 10 次排序?我知道任何序列如果先
当我看到上面的语句时,我正在阅读 shell-sorting。这意味着什么?它对我看待 shell 排序的方式有何不同? PS:我不是在寻找声明的证据。 最佳答案 好吧,你可能暗示下一个排序阶段不会“
今天在检查mysql服务器的时候提示Sort aborted: Out of sort memory, consider increasing server sort buffer size,安装字
我是一名优秀的程序员,十分优秀!