AppSync GraphQL 模拟解析器映射未生成唯一项目

Posted

技术标签:

【中文标题】AppSync GraphQL 模拟解析器映射未生成唯一项目【英文标题】:AppSync GraphQL Mocking Resolver Map Not Generating Unique Items 【发布时间】:2019-05-21 16:55:53 【问题描述】:

我的模拟不是为每个项目生成唯一数据,而是每个项目都具有相同的字段值。

选项 1:(理想的方法,错误的结果)

AppSync 架构包含[Model]items 字段,如果我将Model 解析器单独放置,则items 列表中的所有Model 具有相同的值。

const mocks = 
  ModelModelConnection: () => (
    items: () => new MockList(5),
  ),
  Model: () => (
    id: casual.uuid,
    name: casual.title,
  ),
;

导致...


选项 2:(替代方法,正确结果)

const mocks = 
  ModelModelConnection: () => (
    items: () => new MockList(5, () => (
      id: casual.uuid,
      name: casual.title,
    )),
  ),
;


我想使用选项 1,但我似乎无法获得要模拟的独特项目。一直在为这个挠头。提前致谢!

【问题讨论】:

目前还不清楚您到底在问什么或您想要实现什么。究竟是什么问题?预期的结果是什么? @Larce 选项 1 在 name 字段中生成所有相同的数据,而选项 2 在 name 字段中生成唯一数据。我想使用选项 1 构建树,但数据需要像选项 2 一样是唯一的 【参考方案1】:

如the docs 所示,如果您想在每次触发字段的解析器时生成不同的值,则模拟解析器应该是一个函数,而不是一个值。所以而不是:

Model: () => (
  id: casual.uuid,
  name: casual.title,
),

你应该这样做:

Model: () => (
  id: () => casual.uuid,
  name: () => casual.title,
),

这会导致每次解析字段时都会调用 idname

【讨论】:

对不起,如果我错过了,但在文档中没有明确说明:当不定义模拟时,addMocksToSchema 的默认行为是模拟一个 Foo 数组以包含两个相同的 Foo对象?

以上是关于AppSync GraphQL 模拟解析器映射未生成唯一项目的主要内容,如果未能解决你的问题,请参考以下文章

解析器中的 AppSync GraphQL 变异服务器逻辑

Dynamo DB 中的 AWS AppSync 简单 graphql 解析器无法正常工作,这让我发疯

Appsync“批量创建”解析器给出“映射模板”错误

Aws Appsync 解析器:如何创建解析器以更新列表映射 (DynaMoDB) 中的项目

在子解析器 AWS AppSync 中获取父对象

Appsync 中的字段解析器使用与参数相同的查询输出