我是graphql世界的新手,我正在尝试使用Apollo Server v2设置多个模块化架构和解析器。
我注意到我的解析器顺序存在问题,这很奇怪。
在Object.assign({}, propertiesResolver, agreementsResolver)
行中,不会调用由propertiesResolver定义的所有解析程序,因为它是解析程序顺序中的第一个。如果我交换了两组Object.assign({}, agreementsResolver, propertiesResolver)
之类的解析器,则现在不会调用由AgreementResolver定义的解析器。
我在这里错过了有关graphql执行的一些重要细节吗?
注意:我的所有架构定义和相应的解析器均已正确定义,我感觉导入顺序不正确。
答案 0 :(得分:1)
使用Object.assign时:
如果目标对象中的属性具有相同的键,则它们将被源中的属性覆盖。以后的源的属性将类似地覆盖以前的源。
Object.assign
不会进行深度合并,这大概就是您所期望的。如果两个源具有相同的属性,则仅使用最后一个源的属性。因此,给定两个对象,例如:
const a = {
Query: {
foo: () => 'FOO',
},
}
const b = {
Query: {
bar: () => 'BAR',
},
}
如果您使用Object.assign
合并它们,则结果对象将具有与Query
或a
匹配的单个b
属性(取决于后面的参数是哪个) )。为了进行深合并以合并具有相同名称的属性对象,您应该使用现有的解决方案,例如lodash:
const resolvers = _.merge(a, b)