我正在使用graphql-tools@v6
并且已经实现了两个指令@map
和@filter
. 我的目标是像地图和过滤器管道一样使用它们。在某些情况下,我想在过滤之前进行映射,而在其他情况下,反之亦然。这些指令是使用Schema Directives API实现的,并且当仅应用一个指令时它们会按预期工作。
但是,如果我将它们一起使用,那么它们总是以一种特定的顺序执行,这与它们在模式中的声明方式不匹配。
例如
directive @map on FIELD_DEFINITION
directive @filter on FIELD_DEFINITION
# usage
type MyType {
list1: [String!]! @map @filter
list2: [String!]! @filter @map
}
在这种情况下,要么映射两个字段,然后过滤,反之亦然。顺序由我在schemaTransforms
属性中传递它们的方式控制。
const schema = makeExecutableSchema({
schemaTransforms: [mapDirective, filterDirective] # vs [filterDirective, mapDirective]
});
我相信由于这些转换是作为数组传递的,所以它们的执行顺序取决于数组的顺序。我可以用它们替换它们,directiveResolvers
但它们的功能有限。
但是让我失望的是文档中的以下声明
使用directiveResolvers 的现有代码可以考虑迁移到直接使用mapSchema
因为它们在执行顺序方面有不同的行为,所以我看不出它们是如何互换的。
有人可以解释是否有办法保证模式指令按照它们在特定字段的模式中使用的顺序执行?