Apollo Server: pass arguments to nested resolvers

前端 未结 3 763
余生分开走
余生分开走 2021-01-21 20:28

My GraphQL query looks like this:

{
    p1: property(someArgs: \"some_value\") {
        id
        nestedField {
            id
            moreNestedField {
           


        
3条回答
  •  暗喜
    暗喜 (楼主)
    2021-01-21 20:53

    Params can be passed down to child resolvers using currently returned value. Additional data will be removed from response later.

    I'll 'borow' Daniel's code, but without specific params - pass args down as reference (suitable/cleaner/more readable for more args):

    function propertyResolver (parent, args) {
      const property = await getProperty()
      property.propertyArgs = args
      return property
    }
    
    // if this level args required in deeper resolvers
    function nestedPropertyResolver (parent, args) {
      const nestedProperty = await getNestedProperty()
      nestedProperty.propertyArgs = parent.propertyArgs
      nestedProperty.nestedPropertyArgs = args
      return nestedProperty
    }
    
    function moreNestedPropertyResolver (parent) {
      // do something with parent.propertyArgs.someArgs
    }
    

    As Daniels stated this method has limited functionality. You can chain results and make something conditionally in child resolver. You'll have parent and filtered children ... not filtered parent using child condition (like in SQL ... WHERE ... AND ... AND ... on joined tables), this can be done in parent resolver.

提交回复
热议问题