在 Apollo Server 中调用另一个解析器的最佳方式是啥?

Posted

技术标签:

【中文标题】在 Apollo Server 中调用另一个解析器的最佳方式是啥?【英文标题】:What's the best way to call another resolver in Apollo Server?在 Apollo Server 中调用另一个解析器的最佳方式是什么? 【发布时间】:2019-10-17 13:28:17 【问题描述】:

假设您想从 updatedAt 解析器调用 createdAt 解析器。例如这不起作用:


  Review: 
    createdAt: review => review._id.getTimestamp(),
    updatedAt: review => review.updatedAt || this.createdAt(review)
  ,

我意识到我可以创建一个从两者调用的reviewCreatedAt() 函数,但我正在寻找一种方法来调用createdAt 解析器。

【问题讨论】:

【参考方案1】:

没有调用另一个解析器的标准方法。即使您不使用箭头函数,使用this 也不起作用,因为当底层代码调用解析器时上下文会丢失。你可以这样做:

const resolvers = 
  Review: 
    createdAt: review => review._id.getTimestamp(),
    updatedAt: review => review.updatedAt || resolvers.Review.createdAt(review)
  ,

但是,如果您使用的是数据模型,您可能会发现将这个逻辑提升到数据模型中(使用计算字段或虚拟字段)更容易。

【讨论】:

以上是关于在 Apollo Server 中调用另一个解析器的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

Apollo Server v2 - 未调用 GraphQL 解析器

GrapQHL Apollo Server,提取值并在解析器中使用它们

Apollo-server 2 验证中间件

如何在一个类型中添加多个解析器(Apollo-server)

为啥我的 graphql apollo 解析器没有被调用?

Apollo GraphQL:增强而不是覆盖默认解析器行为